- ベストアンサー
エクセルVBAで別ファイルのデータを取得しに行ってます。
エクセルVBAで別ファイルのデータを取得しに行ってます。 http://www.officetanaka.net/excel/vba/tips/tips28.htm の二つ目に書かれたコードを参考に作ったんですが、取得セル範囲を何も入力されてない所まで広げると何も入力されてない所は『0』と取得、表示されてしまいます。 取得した時に『0』で表示するのを避ける方法はありますか?
- みんなの回答 (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 以上ご参考まで。
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
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 とかかな?
お礼
ありがとうございました。大変勉強になりました。 お蔭様で問題解決出来ました。
お礼
大変勉強になりました。 お蔭様で問題を解決することが出来ました。 本当にありがとうございました。