1

多くの場合、複数のシートから値を取得する必要があります (一部のクレイジーなワークブックでは、最大 200 シートになる場合があります)。問題は、これらの 200 枚のシートは名前も含めてすべて同じ構造であり、これらの 200 枚のシートを 1 つずつリンクするのは気が狂っていることです。次のようなユーザー定義関数を作成する方法はありますか

=getValue(sheetName,cell address)

私は試した

Function GetValue(sheetName As String, cellAddress As String) As Variant
   GetSheetValue = Range(sheetName & "!" & cellAddress).Value
End Function

Excelファイルを切り替えるまではうまくいきます。関数は、他の開いているワークブックで SheetA、B、C、D @A1 を検索しようとする #Value を返し始めます。

ここに画像の説明を入力

4

2 に答える 2

2

以下のコードを試してください

Function GetValue(sheetName As String, cellAddress As String) As Variant
   GetSheetValue = ThisWorkbook.Sheets(sheetName).Range(cellAddress)
End Function
于 2013-10-11T19:14:30.003 に答える
1

これはVBAでかなり簡単に解決できます。For...Next ループは、200 個のワークシートすべてを調べて、値を返します。例えば:

my_index = 1
For Each ws In Worksheets
  If ws.Name <> worksheet_to_store_values_on Then
    worksheet_to_store_values_on.Cells(my_index, 1).Value = _
    ws.Range(myrange).Value
    my_index = my_index + 1
  End If
Next

...これは、アクティブなワークブックのすべてのワークシートをループし、各シートの myrange の値を見つけて、この値をワークシート「worksheet_to_store_values_on」の列 A の行「my_index」に格納します。特定の状況に適応できます。

于 2013-10-11T19:09:25.943 に答える