- ベストアンサー
VBのエクセル操作について
VB6.0で下記のようなロジックでエクセル操作をしていますが、 エクセル出力時に全て文字列扱いされるため計算処理でエラーとなって困っています。 数字は数値型で出力したいのですが、良い方法はありますでしょうか。 dim csvline() as string . . . csvline = Split("AAA,BBB,0,1,3,4", ",") . . . XlsSheet.Range(Cells(0, 1),Cells(0, 6) = csvline
- みんなの回答 (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をかけて数値化する必要はないようだ。表示形式は数値になる。
その他の回答 (2)
- piroin654
- ベストアンサー率75% (692/917)
コードの例を挙げておきます。 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
お礼
ご回答、ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
XlsSheet.Range(Cells(0, 1),Cells(0, 6) = CLng(csvline) では?
補足
ご回答、ありがとうございます。 上記回答ですと型が一致しませんのエラーがでます。
お礼
ご回答、ありがとうございます。 バリアント数で複数セルに一発でセットするのは諦めて 1項目ずつセットして対応しました。