• ベストアンサー

エクセルVBAで別ファイルのデータを取得しに行ってます。

エクセルVBAで別ファイルのデータを取得しに行ってます。 http://www.officetanaka.net/excel/vba/tips/tips28.htm の二つ目に書かれたコードを参考に作ったんですが、取得セル範囲を何も入力されてない所まで広げると何も入力されてない所は『0』と取得、表示されてしまいます。 取得した時に『0』で表示するのを避ける方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.2

「結果が0のとき値を返さない」だけであれば 結果が0かどうかを確かめてから値をセットすればOKですね。 Sub Sample2_2()  Dim i As Long  Dim buf As Variant  For i = 1 To 20   buf = ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R" & i & "C1")   If buf <> 0 Then    Cells(i, 1) = buf   End If  Next i End Sub ただ、Sample2_2の場合 書き出し先にあるデータが残ってしまうことがありますから あらかじめ書き出し先をクリアした方が安全です。 Sub Sample2_3()  Dim i As Long  Dim buf As Variant  For i = 1 To 20   Cells(i, 1).ClearContents   buf = ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R" & i & "C1")   If buf <> 0 Then    Cells(i, 1) = buf   End If  Next i End Sub また、「元データに空白ではなく0が入っていた場合」 上記のコードでは本当に0であっても空白になってしまいます。 「空白なら空白,0なら0」とする場合は、下記のように取得する時点で確認する必要があります。 Sub Sample2_4()  Dim i As Long  Dim buf As Variant  For i = 1 To 20   Cells(i, 1).ClearContents   If Not ExecuteExcel4Macro("ISBLANK('C:\[Book1.xls]Sheet1'!R" & i & "C1)") Then    Cells(i, 1) = ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R" & i & "C1")   End If  Next i End Sub 以上ご参考まで。

ganba1192
質問者

お礼

大変勉強になりました。 お蔭様で問題を解決することが出来ました。 本当にありがとうございました。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub Sample2_1()     Dim i As Long     Dim v As Variant     For i = 1 To 20         v = ExecuteExcel4Macro("'C:\[Book1.xls]Sheet1'!R" & i & "C1")         If Len(v) > 0 Then Cells(i, 1) = v     Next i End Sub とかかな?

ganba1192
質問者

お礼

ありがとうございました。大変勉強になりました。 お蔭様で問題解決出来ました。

関連するQ&A