回答受付が終了しました

ID非公開

2022/6/12 8:55

33回答

Excelでマクロを作らなくてはいけなくなったのですが正直できなくて困っています。 助けてください。

画像

Excel | Visual Basic1,136閲覧xmlns="http://www.w3.org/2000/svg">500

回答(3件)

0

上の表は売り、買いにより、金額、部門などの情報が別列という わかりにくい表になっているので、これを整理するのが先です。 1.別シートを使って売り、買いのフラグを追加し同一列に 変換し、すっきりした表にします。 2.その後2行に分離する 2段階にすると、わかりやすいロジックになります。 *もちろんひとつのマクロの中でできます。 サンプル作成は時間的に難しいので、 どなたか、これをコード化していただけると良いですけど。

0

修正があったので、再回答します。 シート名、セル位置が解りません。画像の様な表とします。 A2: =IF(B2,"E","") B2: =INDEX(Sheet1!A:A,ROW()/2+1) セルの書式設定、ユーザー定義「m"月"d"日";;」 C2: =IF(B2,1,"") D2: =MID("○△",ISODD(ROW())+1+(B2=0)*2,1) E2: =IFERROR(INDEX(部門名!A:A,MATCH(INDEX(Sheet1!C:C,ROW()/2+1)&INDEX(Sheet1!G:G,ROW()/2+1),部門名!B:B,0)),"") F2: =IFERROR(INDEX(名前!A:A,MATCH(IF(XOR(D2="○",INDEX(Sheet1!B:B,ROW()/2+1)>""),"現金",INDEX(Sheet1!B:B,ROW()/2+1)&INDEX(Sheet1!F:F,ROW()/2+1)),名前!B:B,0)),"") G2: =INDEX(Sheet1!D:D,ROW()/2+1)+INDEX(Sheet1!H:H,ROW()/2+1) セルの書式設定、ユーザー定義「#」 J2: =INDEX(Sheet1!E:E,ROW()/2+1) セルの書式設定、ユーザー定義「#」 纏めて下へコピペ。 上司からはvba でと言われているそうですが、関数の方がいい案件なので、これを提案してみたらどうでしょうか。

画像
ID非公開

質問者2022/6/13 18:43

修正データまで下さり本当にありがとうございます。 上司が何故か休んでいたので明日上司に言いたいと思います。 私が能力がないのでまたお伺いすることがあるかもしれませんが教えて頂けたら幸いです。

0

あまり美しいコードではないですがサンプル添付します。 イチゴとプリン以外にも商品はあるんですよね? あと、現金や部門のコードを対応させるには更に手を加えなければいけません。 Sub test() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim RowEnd As Long Dim CopyRow As Long Set Ws1 = Worksheets(1) Set Ws2 = Worksheets(2) RowEnd = Ws1.Cells(Rows.Count, 1).End(xlUp).Row CopyRow = 2 For i = 2 To RowEnd If Ws1.Cells(i, 2).Value <> "" Then Ws2.Cells(CopyRow, 1).Value = "E" Ws2.Cells(CopyRow + 1, 1).Value = "E" Ws2.Cells(CopyRow, 2).Value = Ws1.Cells(i, 1).Value Ws2.Cells(CopyRow + 1, 2).Value = Ws1.Cells(i, 1).Value Ws2.Cells(CopyRow, 3).Value = "○" Ws2.Cells(CopyRow + 1, 3).Value = "△" Ws2.Cells(CopyRow, 4).Value = 1 Ws2.Cells(CopyRow + 1, 4).Value = 1 Ws2.Cells(CopyRow, 5).Value = Ws1.Cells(i, 3).Value Ws2.Cells(CopyRow + 1, 5).Value = Ws1.Cells(i, 3).Value Ws2.Cells(CopyRow, 6).Value = Ws1.Cells(i, 2).Value Ws2.Cells(CopyRow + 1, 6).Value = Ws1.Cells(i, 2).Value & "現金" Ws2.Cells(CopyRow, 7).Value = Ws1.Cells(i, 4).Value Ws2.Cells(CopyRow + 1, 7).Value = Ws1.Cells(i, 4).Value Else Ws2.Cells(CopyRow, 1).Value = "E" Ws2.Cells(CopyRow + 1, 1).Value = "E" Ws2.Cells(CopyRow, 2).Value = Ws1.Cells(i, 1).Value Ws2.Cells(CopyRow + 1, 2).Value = Ws1.Cells(i, 1).Value Ws2.Cells(CopyRow, 3).Value = "○" Ws2.Cells(CopyRow + 1, 3).Value = "△" Ws2.Cells(CopyRow, 4).Value = 1 Ws2.Cells(CopyRow + 1, 4).Value = 1 Ws2.Cells(CopyRow, 5).Value = Ws1.Cells(i, 7).Value Ws2.Cells(CopyRow + 1, 5).Value = Ws1.Cells(i, 7).Value Ws2.Cells(CopyRow, 6).Value = Ws1.Cells(i, 6).Value Ws2.Cells(CopyRow + 1, 6).Value = Ws1.Cells(i, 6).Value & "現金" Ws2.Cells(CopyRow, 7).Value = Ws1.Cells(i, 8).Value Ws2.Cells(CopyRow + 1, 7).Value = Ws1.Cells(i, 8).Value End If CopyRow = CopyRow + 2 Next i End Sub

ID非公開

質問者2022/6/12 11:17

返信、作成本当にありがとうございます。 はい。名前の方のコードは50以上、部門の方は5つ程度あるようです。 もし、コードを数字に変換する作業を行う場合はどうしたらよいでしょうか? vbaの知識はほとんど無い状態で任され放心状態でしたので作成していただけて感謝しかありません