dポイントプレゼントキャンペーン実施中!

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

A 回答 (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

以上ご参考まで。
「エクセルVBAで別ファイルのデータを取得」の回答画像2
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/13 19:07

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

とかかな?
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/05/13 19:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!