• ベストアンサー

VBのエクセル操作について

VB6.0で下記のようなロジックでエクセル操作をしていますが、 エクセル出力時に全て文字列扱いされるため計算処理でエラーとなって困っています。 数字は数値型で出力したいのですが、良い方法はありますでしょうか。 dim csvline() as string . . . csvline = Split("AAA,BBB,0,1,3,4", ",") . . . XlsSheet.Range(Cells(0, 1),Cells(0, 6) = csvline

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

例として Sub test03() x = """山田2"",""江戸川区"",123,456,789" y = Split(x, ",") For i = 0 To UBound(y) MsgBox y(i) Next i Range("a1:E1") = y End Sub をやってみるとA1:E1に値はセットされるが、データが数字であっても手入力のときのように数字化はなされないようだ。 バリアント数で複数セルに一発でセットはあきらめて、 1項目ずつセットしないと、ならないようだ。’が付くのであとから表示形式を数値にしてもだめなようだ。 もともとSplitは文字列を文字列に分割するものと思う。 Sub test04() x = """山田2"",""江戸川区"",123,456,789" y = Split(x, ",") For i = 0 To UBound(y) MsgBox y(i) Cells(1, i + 1) = y(i) Next i End Sub 右3項目について(123,456,789) こちらは1をかけて数値化する必要はないようだ。表示形式は数値になる。

go_osaruku
質問者

お礼

ご回答、ありがとうございます。 バリアント数で複数セルに一発でセットするのは諦めて 1項目ずつセットして対応しました。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

コードの例を挙げておきます。 csvlineをループしながら取り出し、 数値ならClng関数、文字列ならば そのまま出力。 Sub test1() Dim csvline As Variant Dim i As Long Dim a As Long Dim b As String csvline = Split("AAA,BBB,0,1,3,4", ",") For i = 0 To UBound(csvline) If IsNumeric(csvline(i)) Then a = CLng(csvline(i)) Debug.Print "数値" & a Else b = csvline(i) Debug.Print "文字" & b End If Next i End Sub

go_osaruku
質問者

お礼

ご回答、ありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

XlsSheet.Range(Cells(0, 1),Cells(0, 6) = CLng(csvline) では?

go_osaruku
質問者

補足

ご回答、ありがとうございます。 上記回答ですと型が一致しませんのエラーがでます。

関連するQ&A