質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

623閲覧

【VBA】このCSV作成におけるループ処理の仕方が分からない

mikuraki

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/12/27 01:26

質問

下記のエクセルデータを

番号内容1内容2内容3補足注意事項
11a.jpg1b.jpg1c.jpgあああかかか
22a.jpg2b.jpg2cjpgいいいききき
33a.jpg3b.jpg3c.jpgうううくくく

このようなcsvとして出力したい

番号順番内容補足注意事項
111a.jpgあああかかか
121b.jpg
131c.jpg
212a.jpgいいいききき
222b.jpg
232c.jpg
313a.jpgうううくくく
323b.jpg
333c.jpg

考えた事

For~Next文で出来るか考えたが難しそうなので
Do Loop文ならできそうだけど思いつかない

お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/12/27 01:55

で、しつもんはなんでしょうか
pig_vba

2022/12/27 02:32 編集

>For~Next文で出来るか考えたが難しそうなので for nextが一番簡単に実装できそうですが… 今のままだと完全に丸投げになるので「どこまでなら書けるか」を質問文に追記していただければ比較的回答が付きやすくなると思います 例:1行だけなら仕様通りの並びに変えられる、csv出力は書ける等
guest

回答3

0

どうもfor nextとifを使った文が好きになれなかったのと長いので
Do Loopで書いてみました。

VBA

1Sub test() 2 3 Dim sht As Worksheet 4 Dim exp As Worksheet 5 Dim i As Long 6 Dim j As Long 7 8 Set sht = Worksheets("sheet2") 9 Set exp = Worksheets("sheet3") 10 i = 2 11 j = 2 12 13 Do Until sht.Cells(j, 1).Value = "" 14 exp.Cells(i, 1) = sht.Cells(j, 1) 15 exp.Cells(i + 1, 1) = sht.Cells(j, 1) 16 exp.Cells(i + 2, 1) = sht.Cells(j, 1) 17 18 exp.Cells(i, 2) = 1 19 exp.Cells(i + 1, 2) = 2 20 exp.Cells(i + 2, 2) = 3 21 22 exp.Cells(i, 3) = sht.Cells(j, 2) 23 exp.Cells(i + 1, 3) = sht.Cells(j, 3) 24 exp.Cells(i + 2, 3) = sht.Cells(j, 4) 25 26 exp.Cells(i, 4) = sht.Cells(j, 5) 27 exp.Cells(i, 5) = sht.Cells(j, 6) 28 29 i = i + 3 30 j = j + 1 31 Loop 32 33End Sub

投稿2023/01/02 08:10

mikuraki

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なるほど!
if構文で判定してやっていく方法なんですね!

投稿2022/12/27 04:04

mikuraki

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんな感じで実装できます。
コードそのまま渡したらただの作業依頼なので一部はヒントを参考に自分で埋めてください。

VBA

1Option Explicit 2Option Base 1 3 4Sub てすと() 5 6 Dim rng As Range 7 Dim r As Long 8 Dim c As Long 9 Dim entRow As Long 10 11 '元シート 12 Dim form As Worksheet: Set form = ThisWorkbook.ActiveSheet 13 14 'csv出力用 15 Dim csv As Workbook 16 Set csv = Workbooks.Add 17 Dim wsCSV As Worksheet 18 Set wsCSV = csv.Sheets(1) 19 20 21 wsCSV.Range("A1:E1").Value = Array("番号", "順番", "内容", "補足", "注意事項") 22 For r = 2 To 4 23 '初期位置設定 24 Set rng = wsCSV.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) 25 26 For c = 2 To 4 27 With form 28 If c = 2 Then .Range(.Cells(r, 4), .Cells(r, 5)).Copy Destination:=rng.Offset(0, 1) 29 30 rng.Offset(0, -2).Value = 'ヒント:同じ行は同じ数値 31 rng.Offset(0, -1).Value = 'ヒント:同じ行の何番目か?答えはコード内に 32 rng.Value = 'ここはさすがにわかりますよね 33 End With 34 Set rng = rng.Offset(1, 0) 35 Next c 36 Next r 37 38 'csvとして保存する処理(自分で実装してね) 39 40End Sub

投稿2022/12/27 02:49

pig_vba

総合スコア807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問