• ベストアンサー

vba split関数 コンマ区切りの数字を表示 

エクセルに不慣れなため教えていただけたら幸いです。 A列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してD~G列に表示したいと考えています。 3つのものだけだとvbaを作成できたのですが、4つ目があるときというプログラムが不明です。 現在作成済みのマクロは下記のとおりです。 Sub test() Dim SH As Worksheet Dim i As Long Set SH = Worksheets("sheet1") For i = 1 To 9 SH.Cells(i, 4).Value = Split(SH.Cells(i, 1).Value, ",")(0) SH.Cells(i, 5).Value = Split(SH.Cells(i, 1).Value, ",")(1) SH.Cells(i, 6).Value = Split(SH.Cells(i, 1).Value, ",")(2) Next i End Sub お手数ですがお分かりになられるかたがいらっしゃいましたら回答いただけたら助かりますのでよろしくお願いいたします。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (714/1472)
回答No.1

その組み方、よくありません。 Split を 3回実行していて無駄です。 変数に入れて、1回にした方がいいです。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

yyyyy555
質問者

お礼

早速のご返答ありがとうございます。 助かりました。

Powered by GRATICA

関連するQ&A

  • vba split関数 コンマ区切り

    エクセル・vbaに不慣れなためわかりづらかったら申し訳ありません。 コンマ区切りの数字をsplit関数で分割して指定セルに表示したいと考えており、以前質問し回答をいただいた内容でやりたいことが出来るようになりました。 ただし、若干出力場所等の変更を行いたいのですが、変更することが出来ません。 以前はA~C列にあるものをE~H列・J~M列・O~R列に表示する。 その際、A~C列にあるコンマ区切りの数字は3つのものと4つのものがあります。画像の上段部分をご確認ください。 その際のマクロは下記のとおりです。 Sub Test() Dim i As Long, j As Long, k As Long Dim tmp As Variant For i = 1 To 3 For j = 3 To 11 tmp = Split(Cells(j, i).Value, ",") For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k) End If Next Next Next End Sub 変更したいのは、AC8~AE16にコンマ区切りの数字があります。 AC列にある数字はAI8~AL16にAD列にある数字はAS8~AV16に AE列にある数字はBC8~BF16に表示したいと考えています。 コンマ区切りの数字は3つのものと4つのものがあります。 (画像の下段部分をご確認ください。) 上記のマクロでは下記の部分を変更する必要なのかと考えていますが、変更方法がわかりません。 お分かりの方教えていただけたら幸いです。 どうぞよろしくお願いいたします。 For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k)

  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • (VBA)Splitの抜き出しが上手くいかない

    以下のようなコードで「指定区切り文字」の前後で文字列を切り出しています。 添付画像見てもらえれば判ると思いますが B8セルからのB列の値が「29:08」が正解なのに 「29:08:00」と最後に「:00」が付いた形式になっています。 (B13で1時間を過ぎると正常になっています。) このため、以後のE及びF列の書き出しもおかしな値となりました。 どのように修正すれば良いでしょうか ? Option Explicit Sub Chapter_Plus() Dim I As Long Dim J As Long Dim TEMP As Variant Dim SepChr As String Dim WS1 As Worksheet Dim WS2 As Worksheet Dim EndLow As Long Dim LineData As String Dim OutText As String Dim byteData() As Byte '一時格納用 Set WS1 = Worksheets("DATA") Set WS2 = Worksheets("Chapter") 'シートの初期化 WS1.Range("B3:H100").Clear WS2.Range("A1:A100").Clear SepChr = InputBox("指定文字を入力してください。", "区切り文字入力", " ") 'TotalLength = InputBox("時間を(h:mm:ss)で入力してください。", "ファイルサイズ入力") EndLow = WS1.Cells(Rows.Count, "A").End(xlUp).Row With WS1 '区切り文字で切り出す For I = 3 To EndLow TEMP = Split(.Cells(I, "A"), SepChr) .Cells(I, "B") = TEMP(0) .Cells(I, "C") = TEMP(1) Next '仮チャプター書き出す For I = 3 To EndLow .Cells(I, "E").Value = Format(.Cells(I, "B").Value, "hh:mm:ss") .Cells(I, "F").Value = Format(.Cells(I + 1, "B").Value, "hh:mm:ss") .Cells(I, "G").Value = .Cells(I, "C").Value Next '番号 For I = 3 To EndLow .Cells(I, "H").Value = CStr(Format(I - 2, "'00")) Next End With End SUB

  • 【Excel VBA】カンマ毎にデータを区切る

    はじめて質問をさせて頂きます。 Excel VBAは初心者です。 仕事で必要なため、本を読みながら考えておりましたが、 手も足も出ない状態です。 【質問内容】 Excel VBAにて、ExcelファイルのA列のみに格納されているデータを カンマ「,」の位置毎に区切ります。 ※格納されているデータ例:A,B,C,D,E Excelの区切り位置にて、カンマで区切る処理と同じです。 A1から処理を開始し、A列のデータがなくなるまで 上記の処理を行います。 下記のプログラムを実行すると、1行目は正常にカンマ毎に 区切られますが、2行目以降はカンマ毎に区切られず、 そのままの状態です。 どこに問題があり、どのように修正すれば良いのでしょうか、 ご教示頂けると助かります。宜しくお願いします。 【プログラム】 Sub カンマ毎に区切る() Dim mydata As String Dim myArray() As String Dim i, j As Integer j = 0 Do While Cells(j + 1, "A").Value <> "" mydata = Cells(j + 1, 1) myArray() = Split(mydata, ",") For i = 0 To UBound(myArray) Cells(1, i + 1).Value = myArray(i) Next j = j + 1 Loop End Sub

  • VBAでSplitエラーです

    環境:Excel2002です   Cells(1, 1)に(1)~(10),(13),(20)~(28)のような値があります   Cells(1, 1)の値は別のプロシージャ求めていてその都度変わります   Cells(j, 4)をスタート位置にして   Cells(j, 4)に(1)~(10)   Cells(j+1, 4)に(13)   Cells(j+2, 4)に(20)~(28)を表示したいので   以下のプロシージャにしました Dim Str As String Str = ActiveSheet.Cells(1, 1).Value Dim i As Integer Dim j As Integer '◆カンマで区切った文字列をD列に格納 Dim tmp As Variant tmp = Split(Str, ",") j = 1 For i = 0 To UBound(tmp) ActiveSheet.Cells(j, 4) = tmp(i) j = j + 1 Next i   あるブックでは正常に動作するのですが   別のブックでは以下のエラーメッセージがでて動作しません   【モジュールではなく、変数またはプロシージャを指定してください】   何が原因なのでしょうか?ご教示願います   Splitを使わない別の方法があればそれでも結構です   とにかく困っています

  • (VBA)Split関数を使った文字列の区切りについて教えて頂けますでしょうか?

    VBA初心者でSplit関数を使った文字列の区切りがどうしてもうまくいかず非常に困っております。 アドバイス頂けますでしょうか。宜しくお願い致します。 詳細を説明させて頂くと、 (1)エクセルシートのA2セルからA??までの各セルにスペースを含んだ文字列がそれぞれ入力されており、そのそれぞれのセルをスペースで区切ってまず表示させる。 ※データは常にシートのA2からはじまりA3, A4,・・・と不特定に数十行あります (具体例は添付ファイルをご覧頂けますと幸いです。※画像が多少見づらいのですが、画面上のほうがもともとの表で、下の方が完成させたいイメージです。) そして、実際にトライしてみたVBAのソース・・・(本当お恥ずかしいというか 情けないですが。。) Sub data_split() Dim buf As String, tmp, cnt As Long, I As Long cnt = 2 buf = ThisWorksheet.Cells(cnt, 1).Value 'ループ処理(1)(2行目からセルが空になるまで行う処理) Do Until Cells(cnt, 1) = "" cnt = cnt + 1 tmp = split(buf, "") ' データ(文字列)をスペースで区切って出力。 For I = 0 To UBound(tmp) Cells(cnt, I + 1) = tmp(I) Next I Loop End Sub (2)A列からD列までの文字列はそのままで、E列以降(F,G、H・・・)に入った文字列はすべてまとめてE列の各セルに入力させたい。 'AからDまでのセルに入ったセルはそのままでよい。 'E以降の区切られたデータは全部Hセルに入力する VBA初心者なのですが、仕事上、取り急ぎこのようなイメージのVBAを作成しないといけないのですが、本やサイトを見ていろいろと試みているのですがどうしてもうまくいかず非常に困っております。。どうぞ宜しくお願い致します。 参考にしたサイト:http://officetanaka.net/excel/vba/tips/tips62.htm

  • VBAで修正ボタンを作成

    先ほどは登録ボタンを作成したのでが、 修正ボタンもあれば便利だと思い作りたいのですが 一向にできません。 一覧表より、番号を検索して一致するセルの場所に 上書き?保存をするようにしたいのですが どのようにすればよいでしょうか? 先ほどから新たに訂正を加えたのですが、 やはりダメでした。 Private Sub CommandButton2_Click() '修正ボタン Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 'マッチ Range("F2").Select n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = n '送り方 sh2.Cells(n, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(n, 23).Value = sh1.Cells(5, 3).Value MsgBox "修正できました。" End Sub よろしくお願い致します。

  • エクセルVBAで

    登録ボタンを作りたいのですが うまくいきません。 応答無しになってしまいます。 仕事でコードを入力して、住所やその他の関連事項を 登録して、検索し、封筒に宛名印刷し、登録内容の修正をしたいと思っています。 登録ボタンは下記のようなものを作りました。 Private Sub CommandButton1_Click() Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 Do While sh2.Cells(cnt1, 2).Value <> "" cnt = cnt1 + 1 Loop '得意先CD sh2.Cells(cnt1, 2).Value = sh1.Cells(2, 3).Value '現場CD sh2.Cells(cnt1, 3).Value = sh1.Cells(3, 3).Value '送り方 sh2.Cells(cnt1, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(cnt1, 23).Value = sh1.Cells(5, 3).Value MsgBox "登録できました。" End Sub 何が悪いのでしょうか? よろしくお願い致します。

  • Excel97 VBA とVBSのsplit関数

    新しい職場で、Excel VBAでデータを取り込み、それを改行文字ごとにsplit関数で区切って配列に入れようとしました。 arr=split(文字列,vbcrlf) って感じでですね。しかし、なんとその職場のExcelのバージョンが97のため、VBAでsplit関数が使えず、この意図が実現できませんでした。そのため、ネットで調べてVBScriptのsplit関数を流用しようとしたのですが、「終了していない文字列型の定数です。」とエラーが出てしまいます。ソースは次のとおりなのですが、どう直せばいいでしょうか。改行文字で区切るのでなく、カンマなどで区切るのなら、上手く出来るのですが・・・。 Sub sample() Dim vs As Object Dim rtn As Variant Dim q As String Dim buf As String q = Chr$(34) 'ダブルクォーテーション Set vs = CreateObject("ScriptControl") vs.Language = "VBScript" 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 buf = "1" & vbCrLf & "2" & vbCrLf & "3" '改行で区切った文字。実際は、もっと複雑な文字を取り込みます。 rtn = vs.Eval("split(" & q & buf & q & ", vbCrLf)") 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 Debug.Print rtn(1) 'ここで「終了していない文字列型の定数です。」エラーが出る End Sub

  • VBAで空欄にデータに表示

    エクセルVBAのIFを使って、シートaのA列に値があって、B列が空欄の場合のみ、空欄のセルにシートbの値を表示させたいです。 上手くできませんでしたので、教えてください。 Sub Do文2() Dim i As Integer i = 1 If Worksheets("a").Cells(i, 2) = "" Then Do While Worksheets("a").Cells(i, 1) <> "" Worksheets("a").Cells(i, 2) = Worksheets("b").Cells(1, 1) i = i + 1 Loop End If End Sub

専門家に質問してみよう