• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのセルの組み合わせ)

VBAを使用したセルの組み合わせによる商品管理番号の作成方法

このQ&Aのポイント
  • VBAを使ってセルの組み合わせにより商品管理番号を作成する方法について考えています。手動では大変なためVBAを使用したいと思っていますが、組み合わせなのか順列なのかがわからず、どのようにVBAを記述すれば良いか悩んでいます。
  • 商品管理番号を作成するためには、セルの組み合わせが必要です。具体的な例として、セルAの値が11から14までの範囲で、セルBの値がAからFまでの範囲で変化するとします。この場合、11A1、11A2、12A1、12A2、・・・14A6のような商品管理番号を作成する必要があります。
  • VBAを活用することで、セルの組み合わせにより商品管理番号を生成することが可能です。具体的な方法は、for文やネストしたfor文を使用してセルAとセルBの値を組み合わせ、連結して商品管理番号を作成することです。こうすることで手動では大変な作業を効率的に行うことができます。ただし、変数の数やfor文のネストの仕方については、状況によって異なるため柔軟に対応する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 一例です。 「地域コード」はB1セルから列方向に 「商品コード」はB2セルから列方向に (A列は項目列で、データはB列以降にある) あるとします。 Sheet2のA列に表示するようにしてみました。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim j As Long Dim k As Long Dim cnt As Long Dim ws As Worksheet Set ws = Worksheets("Sheet2") ws.Columns(1).ClearContents For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column For k = 2 To Cells(2, Columns.Count).End(xlToLeft).Column cnt = cnt + 1 ws.Cells(cnt, 1) = Cells(1, j) & Cells(2, k) Next k Next j End Sub こんな感じではどうでしょうか?m(_ _)m

makun100
質問者

お礼

回答ありがとうございました。 すっきりとした内容で、応用がききました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

No.3 です。後出しされた条件にお答えします。 >サンプルは2つの組み合わせですが、コードの組み合わせが3つになることもあり、提示のものでは難しいかなと。 簡単です。 No.3 の方法により 2 次元で作製された文字列の一覧を、ドラッグ・アンド・ドロップでも数式でも、好きな方法で 1 列に並べ替え、A 列に配置します(この際、数式を除去しないまま行うこともできます。)。さらに、第 3 の文字列をどこかの 1 行に入力し、また No.3 と同じことを繰り返すだけです。 このとき、第 3 の文字列が存在しない箇所については、そのセルを未入力のままにしておいて構いません。No.3 の数式は未入力のセルを参照しても問題がないので、文字列結合の数式の入力されているセルは特にそこだけ修正したりせず、単にコピペで大丈夫です。参照先が未入力なら、第 3 の文字列が付加されないだけのことです。 以上のことを手作業で行っても、一からマクロのコードを書くのに比べれば、恐らくより早く全てが完成します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

マクロを持ち出すまでもないというか。数式で作るなら、このような。 1. A2:A5 のセル範囲に 11、12、13、14 と、B1:G1 に A1、…、A6 と入力。 2. B2 セルに次式を入力。 B2 =$A2&B$1 3. B2 セルをコピーし、B2:G5 に貼り付け。

makun100
質問者

お礼

回答ありがとうございました。 サンプルは2つの組み合わせですが、コードの組み合わせが3つになることもあり、提示のものでは難しいかなと。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

'データシートで実行(=アクティブシート) '空いているセルなら出力シート=データシートでも構わない '空白セルはスキップ Sub OneWithTwo() Const xName = "Sheet2" '出力シート Const xBase_To = "A2" '出力の基点 Const xBase_From = "B1" 'データの基点 Dim xNum As Long Dim xNum2 As Long Dim jj As Long Dim kk As Long Dim mm As Long Dim mm2 As Long Dim nn As Long Dim xSheet As Worksheet Set xSheet = Worksheets(xName) xSheet.Columns(1).Clear With ActiveSheet nn = 0 mm = Range(xBase_From).Row mm2 = Range(xBase_From).Column xNum=Cells(mm, Columns.Count).End(xlToLeft).Column-mm2+1 For jj = 0 To xNum If (Range(xBase_From).Offset(, jj) <> Empty) Then xNum2=Cells(mm + 1, Columns.Count).End(xlToLeft).Column-mm2+1 For kk = 0 To xNum2 If (Range(xBase_From).Offset(1, kk) <> Empty) Then xSheet.Range(xBase_To).Offset(nn) = Range(xBase_From).Offset(, jj) & Range(xBase_From).Offset(1, kk) nn = nn + 1 End If Next kk End If Next jj End With Worksheets(xName).Select End Sub

makun100
質問者

お礼

回答ありがとうございました。 先の方がありましたので、ベストにはできなかったこと、ご了承ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vba  組み合わせパターン表示

    1,2,3,--,n-1,nからm個とる組み合わせのパターンを セル(1,1)から(nCm、nCm)に表示させる処理をVBAで記述 したいのですが、どうすればいいのでしょうか。 よろしくお願いします。

  • Excelですべての組合せ(重複組合せ)を出力するには?

    Excelですべての組合せ(重複組合せ)を出力するには? 次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか? 10種類のお菓子の中から、好きなものを3個選んでセットにするとします。 同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。 この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。 いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。 また、Accessを使っても似たようなことができるのでしょうか? 直積? できれば、3個固定ではなく5個の場合も出来るとうれしいです。 よろしくお願いします。

  • 同じものを含む順列

    連続する16個の数字から、4つ取り出してその組合せを全て表す処理を作ろうとしています。 まずは意味からと思い、いろいろ検索して調べても、うまく理解できず、最後の手段でここに投稿いたします。 組合せのパターンを割り出すのに、「同じものを含む順列」を使って行うと言われています。 いろいろ調べて混在したものが、意味の違いの点?で、「同じものを含む順列」と「重複順列」とは同じことを表すのでしょうか。 また、「同じものを含む順列」のパターン出力のプログラムを作る必要があり、参考になるサンプルが存在するなら教えていただけないでしょうか。 (順列や組合せは見つかったのですが) 宜しくお願いします。

  • 複数セルの文字列をスマートに連結する方法

    ウィンドウズ7Home Premium 64bit、エクセル2010で、複数セルの文字列をスマートに連結する方法を、ご教授ください。例えば: A1 ABCD A2 EFGH A3 IJKL A4 MNOP A5 QRST A6 UVWX A7 YZ 7セルの文字列を、 A9 ABC...XYZ のように、1つのセルに、文字を連結して表示させる、スマートな方法を、お教えください。 (現在は、手動のコピペで処理しています!) 当方、自称の上級者です。ウィザード、関数、VBAのどの方法でも結構です。 また、セルの数が一定でないため、できれば、範囲選択しての方法がありがたいです。 (Selection) それが不可能なら、VBAのFOR:NEXTで、空白セルでブレークの方法でも。 達人の回答者の方、よろしくお願いいたします。

  • エクセルVBA 変数Aと変数Bの組み合わせに対応する値を返すコード

    ワークシート上に次の表があり,この表をもとにして,変数A(0~4)と変数B(0~4)の組み合わせに対応するC列の値を返すコードは,どう書いたらよいでしょうか。  例えば,変数Aのセルに●(4),変数Bのセルに▲(0)と入力したら,値のセルに■(5)と表示させたいのです。  どなたか教えていただけませんか。 A列  B列  C列  4   0   5  3   1   4  3   0   5  2   2   3  2   1   4  2   0   4  1   3   2  1   2   2  1   1   3  1   0   3  0   4   1  0   3   1  0   2   2  0   1   3  0   0   3 変数A:● 変数B:▲ 値:■

  • For Next 式の結果をセル表示

    Dim i, p  For i = 1 To 9   For p = 1 To 9     Cells(i, i * p).Value = i * p    Next p   Next i  End Sub ↑の式ではA、1~I、9に  結果が出るのですが  その結果を縦にひとつづつ表示したいのです  (たとえばA1~A81へ)  その場合はもうひとつ変数を宣言して  変数に表示したいセルの情報を記入するのですか?  もしくは変数を宣言しなくても可能ですか?    できれば双方のサンプルを教えていただければ  幸いです

  • VBAでセル指定するとき("A1")←半角?

    VBAでセルを指定するとき、 例えばA1のセルを選択するときにRange("A1")と書きますよね。 このときに「A」は半角で入力したのですが、これは全角の「A」でもいいのでしょうか。 実際に全角にしてVBAを組んでも、問題なく処理できました。 ただ「全角にしても問題なく処理できたからいいや」というのではモヤモヤしてしまい、 全角でも問題なく処理できるという記述があるテキストやサイトを探しているのですが 見つかりません。 セル指定するときに全角、半角は関係ないのでしょうか。

  • EXCELVBA 全通りの組み合わせの出力

    はじめまして! VBAの記述の方法が分からず困っています。 過去の質問も検索してみましたが、自分のケースにどうあてはめればよいかわからず・・。 どなたが教えていただけないでしょうか? A1~AK1までそれぞれ1~37までの数字が入力されています。 組み合わせとして、そこから35個の数字を選ぶ場合の全通りを記載したいです。 2行目のA1~AI1までに選んだ35個の数字を出力し、 1行ずつ下にずらしていきたいです。 大変お手数ですが・・・よろしくお願いします・・・

  • EXCEL でセルの大小比較はできますか

    EXCELのVBAで処理を作っているのですが、 その中で、セルのアドレスで大小比較ができたらと思うのですが、可能でしょうか。 条件としては、同じ行内です。 A1などのセルのアドレスを変数Xに入れておいて、  X < Y1 というようなことはできるのでしょうか。 よろしくお願いします。

  • どうやってもFor文を抜けてしまいます…(VBA)

    いつもお世話になっております。 VBAで作業をしていたところ、とある箇所でずっと詰まってしまい、 また皆様のお力を借りたいと思い・・・。 おそらく、基礎中の基礎かもしれませんが、お付き合い頂ければ助かります;; 【質問内容】 Functionが2つあったとします。 現在のFunctionから、別のFunctionに飛んで、また元のFunctionに戻ってきた際に、 Forでループ中でも抜けてしまうのでしょうか? おそらく、何を言ってるか分からないと思いますので、以下にコード例を記載します。 _________________________________ 【コード例】 function sample1() Dim roop as Long ’シート1のCell(7,4)には「100」と入力されており、「roopが2~100」の間ループさせます。 for roop + 2 To sheets("シート1").cells(7,4) 処理2 ’特定条件を満たしたら、「sample2」に飛びます。 if 条件 then call sample2 End If next End function _________________________________________________________________________________________ function sample2() ’sample1()で使用していたroop変数をそのまま使用します for roop + 1 To 50 処理2 roop + 1 next ’処理が終わりsample1()のnextに戻ります。 ’roopには、仮に50が格納されているとします。 End function _________________________________________________________________________________________ 上記のコードとなります。 最初はSample1()で処理を行い、特定条件を満たしたらSample2()に移行。 Sample2()の処理が終わったら、元のSample1()に戻る。 2つのFunction内で使用していた「roop」変数は、まだ80にも関わらず、 Sample1()のFor文を抜けてしまいます。 Sample1()のForのループ条件は「2~100」としていますが、 これは別のFunctionに飛ぶと、無くなってしまうのでしょうか? 何を言っているのか分からないなどございましたら、ご指摘ください・・・;; 以上、よろしくお願いします。

専門家に質問してみよう