この記事では、特定の定義された条件に基づいて、アクティブなワークブックの外部ワークブックからデータを取得する方法を学習します。

この例では、銀行カテゴリの名前とタイプに基づいて、特定の人のお金の詳細を取得します。お金の詳細は「データファイル」ワークブックに保存されます。

DataFile

この例では、フォーマットスタイルとともに金額の詳細を返すVBAプロシージャ「ReadFormatting」を作成しました。

ロジックの説明

「ReadFormatting」プロシージャは、範囲オブジェクトを入力として受け取り、定義された範囲オブジェクトの隣のセルに出力を返します。

「データファイル」ワークブックの最初の行内の範囲で定義された値をチェックし、列番号を見つけます。 「データファイル」ワークブックの最初の列内の定義された範囲の前の列のセルの値をチェックし、行番号を見つけます。

一致する可能性のある列番号と行番号を見つけた後、見つかった列番号と行番号を持つセルの値がフォーマットスタイルとともに返されます。

「ReadFormatting」プロシージャは、他のプロシージャまたはイベントを使用して実行できます。

「ReadFormatting」プロシージャを2つの方法で実行します。手順を使用します。ワークシート変更イベントの使用

手順の使用

セルN13を範囲オブジェクトとして「ReadFormatting」プロシージャを呼び出すために「CallingProcedure」プロシージャを使用しました。外部ワークブックの最初の行のセルN13の値をチェックして列番号を見つけ、外部ワークブックの最初の列のセルM13の値をチェックして行番号を見つけます。列番号と行番号を見つけると、フォーマットスタイルとともに値が返されます。

ArrowRunningMacro

ワークシート変更イベントの使用

ワークシート変更イベントを追加するには、次の手順に従います。シートモジュールをアクティブ化するには、Visual BasicEditorでシート名をクリックします。

ArrowWritingWorksheetEvent

。コードウィンドウ上部の左側のコンボボックスにあるワークシートをクリックします。

ArrowWorksheetChangeEvent

。コードウィンドウの上部にある右側のコンボボックスの変更をクリックします。

プロシージャを実行するためにワークシート変更イベントを使用しました。ワークシート変更イベントは、ワークブックのいずれかのセルの値が変更されたときに発生します。 IFステートメントを使用して、列Iのセルの値が変更された場合にのみトリガーされるように変更イベントを制限しました。値が変更されたセルは、「ReadFormatting」プロシージャの入力として機能します。

コードについては以下に従ってください

Option Explicit

Sub CallingProcedure()

'Calling procedure ReadFormatting for cell N13

Call ReadFormatting(Range("N13"))



End Sub

Sub ReadFormatting(rng As Range)

Dim varRow, varCol As Long

Application.ScreenUpdating = False

'Activating workbook "Data file.xlsx"

Workbooks("Data file.xlsx").Activate

'Checking for Errors

'If any runtime error occur then it will the pointer to end of the procedure

On Error GoTo Last

'Finding the column no after matching rng value in the first row of "Data file.xlsx" workbook

varRow = Application.Match(rng.Value, Rows(1), 0)

'Offset method is used for moving one cell in the previous column

'Finding the row no after matching value of cell in the first column of "Data file.xlsx" workbook

varCol = Application.Match(rng.Offset(0, -1).Value, Columns(1), 0)

'Using If statement for checking errors

'If error not found in varRow and varCol then execute below code

If Not IsError(varRow) And Not IsError(varCol) Then

'Copying value of cell where match of row and column intersect

Cells(varCol, varRow).Copy



'Pasting the format of copied cell

rng.Offset(0, 1).PasteSpecial xlPasteFormats



'Pasting the value of copied cell

rng.Offset(0, 1).PasteSpecial xlPasteValues



'Unselecting the previous copied data and clearing the cache

Application.CutCopyMode = False



End If

Application.ScreenUpdating = True

Last:

Workbooks("Searching_And_Getting_Data_From_Other_File_Along_With_Formatting.xlsm").Activate



End Sub

このブログが気に入ったら、FacebookやFacebookで友達と共有してください。

皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください