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

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

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

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

334閲覧

A列に入力した数値順にB列の値を別シートに貼り付けたい

miyako123

総合スコア11

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2018/07/17 01:14

A列に入力した数値順にB列の値を別シートに貼り付けたいです。

マクロで、複数ある物品の製造番号を転記するための入力シートを作成しています。
納入品リストの中には製造番号があるもの、ないものが混在しているため、
以下の例のように納入品リストを貼り付ける「シートA」から製造番号があるものを抽出して、C列の数量分だけ出力用シート「シートB」に貼り付けたいと考えています。

[シートA]

(A列)並べ替え順(B列)品名(C列)数量
物品A
3物品B3
物品C
1物品D1
物品E
2物品F3


[シートB]

(A列)品名(B列)製造番号
物品D
物品F
物品F
物品F
物品B
物品B
物品B

試したこと

現在、[シートA]のA列が「1」の場合に、シートBに貼り付ける(A列に「1」があるものをC列の数だけ貼り付ける)ことまではできていますが、数字の並び順となるとどうしたらいいのかわからなくなっています。

該当のソースコード

Const 設定区分列 As Integer = 1
Const 繰返数列 As Integer = 11
Const 書込開始行 As Integer = 3
Const 製番表 As String = "製番表作成準備"

数量 = Cells(Rows.Count, 11).End(xlUp).Offset(1).Row

書込中行 = 書込開始行 For i = 1 To 数量 If Cells(i, 設定区分列) = 1 Then For j = 1 To Cells(i, 繰返数列) Sheets(製番表).Cells(書込中行, 2) = Cells(i, 2) 書込中行 = 書込中行 + 1 Next j End If Next i

補足情報(FW/ツールのバージョンなど)

EXCEL2010

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

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

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

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

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

guest

回答1

0

ベストアンサー

今のコードを活かすのであれば、A列の並べ替え順を1から順次検索する処理を追加すれば簡単かと思います。
以下はサンプルですが動作未確認です。

VBA

1Const 設定区分列 As Integer = 1 2Const 繰返数列 As Integer = 11 3Const 書込開始行 As Integer = 3 4Const 製番表 As String = "製番表作成準備" 5 6Dim 並べ替え順 As Integer 7Dim 並べ替え順最大値 As Integer 8 9数量 = Cells(Rows.Count, 11).End(xlUp).Offset(1).Row 10 11書込中行 = 書込開始行 12並べ替え順最大値 = Application.WorksheetFunction.Max("A:A") 13 14For 並べ替え順=1 To 並べ替え順最大値 15 For i = 1 To 数量 16 If Cells(i, 設定区分列) = 並べ替え順 Then 17 For j = 1 To Cells(i, 繰返数列) 18 Sheets(製番表).Cells(書込中行, 2) = Cells(i, 2) 19 書込中行 = 書込中行 + 1 20 Next j 21 End If 22 Next i 23Next

ただし毎回先頭行から見に行くので遅いかもしれません。

投稿2018/07/17 01:45

ttyp03

総合スコア16998

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

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

miyako123

2018/07/17 02:14

早速の回答ありがとうございました! ただ、実行したところ、エラーが発生してしまいましたので、ご報告させていただきます・・・ [エラーメッセージ] 実行時エラー'1004' WorksheetFuntionクラスのMaxプロパティを取得できません。 以上です。 よろしくお願いします。
ttyp03

2018/07/17 02:19

コピペミスでしょうか。 ×WorksheetFuntion ○WorksheetFunction
miyako123

2018/07/17 02:39

エラーメッセージの打ち間違いで、マクロ自体は 並べ替え順最大値 = Application.WorksheetFunction.Max("A:A") と記載しているので、コピペミスではないようです。
miyako123

2018/07/17 02:42

並べ替え順最大値 = Application.WorksheetFunction.Max("A:A") の、()内を Max(Range("A:A")) と書き換えたところ、無事に動きました! 勉強になりました、ありがとうございました!
ttyp03

2018/07/17 02:43

え、なんでだろ。 Applicationから順次打ち込んでいって、Function.まで打ったときにMaxって一覧にないでしょうか? Excel2010は対応しているはずなんだけど。 もしこの方法が解決しない場合、以下でも対処できますので。 ・別の方法で最大値を求める ・最大値がわかっているなら固定値にする ・とりあえず無駄にループがまわるが1000とか大きい値にしておく
ttyp03

2018/07/17 02:44

あ、それか・・・。Range("A:A") すみません、中途半端な回答で。
miyako123

2018/07/17 02:59 編集

いえいえ! 瑣末なことです! 本当にありがとうございました! またご縁がありましたら、よろしくお願いします♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問