No.6ベストアンサー
- 回答日時:
No.1&3です。
こんなのを想定していたのですが・・・。
Sub Macro1()
Dim i As Long
Dim C As Variant
Dim D As Variant
Dim Max As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
C = WorksheetFunction.Transpose(Split(Cells(i, "C").Value, ","))
D = WorksheetFunction.Transpose(Split(Cells(i, "D").Value, ","))
Max = WorksheetFunction.Max(UBound(C), UBound(D))
If Max > 1 Then
Rows(i).Columns("C:D").ClearContents
Rows(i).Copy
Rows(i).Resize(Max - 1).Insert Shift:=xlDown
Cells(i, "C").Resize(UBound(C)).Value = C
Cells(i, "D").Resize(UBound(D)).Value = D
End If
Next i
End Sub
No.5
- 回答日時:
こんにちは、
表題ご質問の解決出来る回答がありますが、
条件が増えた場合の対応にお困りのようですね。
#3様の意見に賛成ですが、#1のコードの改造だと理解しにくいかもと
横から失礼します。
下記コードは、べたな処理で3種類を処理するものです。
Sub try_sample()
Dim flag1, flag2
Dim i As Long, j As Long
Dim UB As Long, n As Long
n = 12 '出力始まり行№
For i = 4 To Range("A4").End(xlDown).Row
flag1 = Split(Cells(i, "C"), ",")
flag2 = Split(Cells(i, "D"), ",")
For j = 0 To 2 '要素数 0to2 で3種類
With Cells(n, "A")
.Value = Cells(i, "A")
.Offset(, 1).Value = Cells(i, "B")
If UBound(flag1) >= j Then '要素数を超えている時の処理
.Offset(, 2).Value = flag1(j)
Else
.Offset(, 2).ClearContents
End If
If UBound(flag2) >= j Then '要素数を超えている時の処理
.Offset(, 3).Value = flag2(j)
Else
.Offset(, 3).ClearContents
End If
End With
n = n + 1
Next
Next
End Sub
変数UBは宣言されていますが使用していません。
要素数(種類)に対して汎用性を持たせるために重要な個所は
'要素数 0to2 で3種類 です。ここの2を3とか6とか変えて実行してみてください。
仕組みが分かると思います。
この定数2を変数にして行ごとの要素数を設定すれば良いと思います。
(#3様がヒントを出されています)
CとDの要素数が違う時困る、要素数を超えた配列要素を呼ぶとエラーになる部分はコードに加えさせていただきました。
If UBound(flag1) >= j Then でエラー回避の為、分岐しています。
こんな書き方もあると言う事で参考になれば良いのですが
データ加工との事なのでデーター数は数万行とかあるのでしょうか?
その場合、都度書き込みたと時間を要するかと思いますが、別の話ですね。
No.4
- 回答日時:
EXCELは、「とにかく作業領域を使って、力業でやってしまう」というような方法もあると思います。
マクロを使わなくても、高度で複雑な関数を使わなくても、関数だけではどうにもならないのでEXCELの便利機能も駆使してしまえば、なんとかはなることが多いように思います。下の図でも、範囲や件数が違っていても、(自動反映はしないですが)少しその都度手直しすれば、なんとかなるし、できたものの、必要部分(範囲)をコピーして、別シートに値貼り付けしてしまえば、多くの場合、それで済むと思います。
なお、同行のC列とD列の項目?件数が違っている場合にはH3が0ではなくなるので、そこをチェックしてください。
No.3
- 回答日時:
フラグ1、フラグ2の値をそれぞれSPLITしてみて、配列数の多い方を基準に処理を行うようにすれば、OKです。
まずは、自分でやってみて、分からない部分があれば、再質問してください。
ただし、回答を保証するものではありませんので、あしからず!!
No.2
- 回答日時:
こんばんは
すでに回答が出ているので、関数でやってみた例を・・・
ご提示のレイアウトで、A12セルに
=IF(COLUMN()<3,INDEX(A:A,INT(ROW()/3)),MID(INDEX(A:A,INT(ROW()/3)),MOD(ROW(),3)*2+1,1))
を入力して、必要範囲にフィルコピーとか。
No.1
- 回答日時:
3種類って、決め打ちで良いのであれば、こんな感じでどうでしょう。
Sub Macro1()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
Rows(i).Copy
Rows(i & ":" & i + 1).Insert Shift:=xlDown
Cells(i, "C").Resize(3).Value = WorksheetFunction.Transpose(Split(Cells(i, "C").Value, ","))
Cells(i, "D").Resize(3).Value = WorksheetFunction.Transpose(Split(Cells(i, "D").Value, ","))
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(VBS) テキストファイル読込で...
-
PL/Iについて、教えてください。
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
スクリプトって、何ですか?ど...
-
エクセルのシート上に別のシー...
-
Windows10、フォルダウインドウ...
-
ウインドウを毎回同じ位置、大...
-
一定時間おきにアラームやポッ...
-
エクセルVBAでフォームのListbo...
-
PDFを(htmlのように)無限に縦...
-
Excelでワードアートや図を常に...
-
Access VBA でForm位置を参照す...
-
ポップアップと作業ウィンドウ...
-
ポップアップウィンドウがブロ...
-
vb2005のwebbrowserで
-
Excel操作 ウィンドウで出した...
-
リトルバスターズEXを中古で購...
-
MacのVLCでウインドウの幅の変更
-
【Windows 7】ポップアップを非...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA/HTML】特定のタグ要素に...
-
(VBS) テキストファイル読込で...
-
VC++のデバッガでvectorの要素...
-
【VB.NET】HTML要素を取得しよ...
-
MFCを使って、ひとつのkey(CStr...
-
VBA HTTPを用いたWEB画面の取...
-
bxSliderで動画をスライドごと...
-
JavaScriptでクリップボードの...
-
JQuery、セレクトボックスをル...
-
jqueryでtable内容の置き換え
-
ファンクションキーの既存の機...
-
フォームで入力時自動で次の項...
-
[C++] vector<string> の各要素...
-
Ajax.Updaterで読み込んだ先の...
-
モーダルウィンドウにおける処...
-
スプレッドシートのチェックボ...
-
PL/Iについて、教えてください。
-
エクセルでタグの内容が取得で...
-
ページ全体をスクロールするAja...
-
jQueryで<body>要素にマウスが...
おすすめ情報
ご回答ありがとうございます。
3種類って決め打ちされていない場合は、如何でしょうか?
行によっては、1種類であったり、5種類入っていたりします…
ありがとうございます。
今回は、セル内のデータが3つの場合だと思うのですが、3つの場合もあれば1つの場合もあれば四つの場合もある場合は、どのような関数になりますでしょうか??
(関数だと難しいでしょうか…?)