VBA初心者です。
どなたか教えてください。
先日も同じような質問をさせていただき、かなり理想に近い回答を
いただきましたが、自力では
どうしても解決に至らず再度投稿させていただきました。
下記の様な表があります。
[やりたいこと]
①A列を最初にみて、文字列の ”0” or ”02” を判断します
②A列が2であれば、となりのセルB列をみます
A列が1であれば上に次に進む
③B列の数字の分だけ その下に行を追加し
追加した行には、同じ内容をコピーします。
④さらに③で増やした行の個数は、1へ変更し元の行も
1へ変更します。
⑤ D列の重量は按分させ、最後の部分でROUNDダウン
させたいです。
⑤最後に処理完了のメッセージBOX
[結果] 表1を 表2の様な形にしたいです。
表1
業者 個数 記事 重量
2 4 A 8
2 3 B 9
2 2 C 10
1 1 D 4
2 1 E 6
1 2 F 3
2 5 G 15
表2
業者 個数 記事 重量
2 1 A 2
2 1 A 2
2 1 A 2
2 1 A 2
2 1 B 3
2 1 B 3
2 1 B 3
2 1 C 5
2 1 C 5
1 1 D 4
2 1 E 4
1 2 F 10
2 1 G 3
2 1 G 3
2 1 G 3
2 1 G 3
2 1 G 3
どうかお願いいたします。
No.4ベストアンサー
- 回答日時:
確認事項1
>①A列を最初にみて、文字列の ”0” or ”02” を判断します
>②A列が2であれば、となりのセルB列をみます
> A列が1であれば上に次に進む
上記の①と②は、つじつまが合いません。
①A列を最初にみて、文字列の ”1” or ”2” を判断します
と解釈します。
確認事項2
>⑤ D列の重量は按分させ、最後の部分でROUNDダウンさせたいです。
重量8を4個で按分すると、2,2,2,2で問題ないですが、
重量6を4個で按分すると、2,2,2,0でしょうか? ・・・A案
それとも
重量6を4個で按分すると、2,2,1,1でしょうか? ・・・B案
とりあえず、B案と解釈します。
前回、tom04さんが回答されたソースに手を加えました。
--------------------------------------------------------------
Sub Sample1()
Dim i As Long, cnt As Long, wS As Worksheet
Dim amari As Long
Dim sho As Long
Dim juuryo As Long
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
.Range("A:D").ClearContents
wS.Range("A1:D1").Copy .Range("A1")
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
cnt = 0
If wS.Cells(i, "A") = 2 Then
amari = wS.Cells(i, "D") Mod wS.Cells(i, "B")
sho = wS.Cells(i, "D") \ wS.Cells(i, "B")
Do Until cnt = wS.Cells(i, "B")
cnt = cnt + 1
With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Value = wS.Cells(i, "A")
.Offset(, 1) = 1
.Offset(, 2) = wS.Cells(i, "C")
juuryo = sho
If amari > 0 Then
juuryo = juuryo + 1
amari = amari - 1
End If
.Offset(, 3) = juuryo
End With
Loop
Else
.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(, 4).Value = wS.Cells(i, "A").Resize(, 4).Value
End If
Next i
.Activate
MsgBox "処理完了"
End With
End Sub
--------------------------------------------------------------
tatsu99さん
ご連絡遅くなりもうしわけございません。
質問の趣旨をご理解いただき、的確な答えをいただきましたのでベストアンサーと
させていただきました。
VBAができる人ってホントにうらやましいです。
またおねがいいたします。
No.3
- 回答日時:
#2の回答者です。
お手数かけてすみません。分かりきったことのようでも、それ聞くのは、長い間に身についた作法みたいなものなのです。
>②A列の表記については、 半角・文字列 となり 2の前には 0があり 表記は ”02”となっております。
思わぬ所でややこしくなるものなのですね。以下のマクロは、あまり格好がよくないですね。それに、中途半端な配列変数を使ってしまいました。他の方のコードも待ってみましょう。
'//
Sub TestMacro1()
Dim Ar As Variant
Dim i As Long, j As Long, k As Long
Dim sh2 As Worksheet
Set sh2 = Worksheets("Sheet2") '出力はシート2
sh2.Cells(1, 1).Resize(, 4).Value = Array("業者", "個数", "記事", "重量")
k = 2
With Range("A1").CurrentRegion
Ar = .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).Value
End With
For i = 1 To UBound(Ar)
If Ar(i, 1) Like "0" Or Ar(i, 1) Like "02" Then
For j = 1 To Ar(i, 2)
With sh2
.Cells(k, 1).Value = "'" & Ar(i, 1)
.Cells(k, 2).Value = 1
.Cells(k, 3).Value = Ar(i, 3)
.Cells(k, 4).Value = Int(Ar(i, 4) / Ar(i, 2))
End With
k = k + 1
Next
Else
With sh2
.Cells(k, 1).Value = "'" & Ar(i, 1)
.Cells(k, 2).Value = Ar(i, 2)
.Cells(k, 3).Value = Ar(i, 3)
.Cells(k, 4).Value = Ar(i, 4)
End With
k = k + 1
End If
Next
MsgBox "元" & UBound(Ar) & "行を" & k - 1 & "行に展開しました。", vbInformation
End Sub
'//
No.2
- 回答日時:
こんにちは。
表1の6行目と7行目は
2 1 E 6
1 2 F 3
↓
表2
2 1 E 4
1 2 F 10
になる仕組みを教えてください。
私は、そのまま変わらないと思っていました。
それと、
>①A列を最初にみて、文字列の ”0” or ”02” を判断します
この表記自体は、最初は、全角の「0」を使っていらっしゃるようですし、
「02」は、Excel上では、文字列ではなく、書式で表示するのが一般的かと思います。この状況下では、文字列比較をするのは、Text Compare モードでも、収まらない可能性があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
Excelで、あるセルの値に応じて...
-
マクロ 最終列をコピーして最終...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
-
B列の最終行までA列をオート...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
マクロ 関数を使った抽出でエラ...
-
IIF関数の使い方
-
VBAで重複データを確認したい
-
Changeイベントでの複数セルの...
-
VBAのFind関数で結合セルを検索...
-
エクセル アクティブセルから...
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
ハイスコアーさん
ありがとうございます。
下記が前回の回答のアドレスです。
https://oshiete.goo.ne.jp/mypage/history/questio …
○前回との変更点は
①D列に、重量を追加
上記です。
どうかお願いいたします。
WindFaller さん
ご教示ありがとうございます。
失礼いたしました、
①6行目 7行目は 当方の誤りです。※ご指摘の通り そのままかわらないのが正当です。
②A列の表記については、 半角・文字列 となり 2の前には 0があり 表記は ”02”と
なっております。
余計わかりずらくさせてしまい申し訳ございません。
何卒よろしくお願いいたします。