- ベストアンサー
エクセルの文字列操作:縦に繰り返す方法
- エクセルでA、B、C列の文字列を縦に繰り返す方法を教えてください。
- 繰り返しの条件が縦になる必要があるため、四苦八苦しています。
- 最終的には繰り返した結果をCSVで書き出してバーコードとして印刷したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロによる一例です。 (1)該当シートタブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キーを押下 (2)A,B,C列をD列の空白が見つかるまでE列に展開します。 Sub sample() k = 1 For Each c In Range("D:D") If c.Value = "" Then Exit Sub wk = c.Offset(0, -3) & c.Offset(0, -2) & c.Offset(0, -1) For i = 1 To c Range("E1").Offset(k - 1).Value = wk k = k + 1 Next Next End Sub
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
作業列を2行使用する方法です。 今仮に、 >A1セルが「a」B1セルが「b」、C1セルが「c」、D1セルの数字が「3」 >A2セルが「AA」B2セルが「BB」、C2セルが「CC」、D2セルの数字が「5」 と入力されているシートがSheet1であるとし、Sheet2のA列とB列を作業列として使用するものとします。 まず、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER(Sheet1!$D1),SUM(Sheet1!$D$1:$D1),"") 次に、Sheet2のB1セルに次の数式を入力して下さい。 =IF(ROWS($A$1:$A1)>SUM(Sheet1!$D:$D),"",SUMPRODUCT((OFFSET($A$1,,,MATCH(65536,$A:$A))<ROWS($A$1:$A1))*(OFFSET(OFFSET($A$1,,,MATCH(65536,$A:$A)),1,)>=ROWS($A$1:$A1))*ROW(OFFSET($A$1,,,MATCH(65536,$A:$A))))+1) 次に、Sheet2のA1~B1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 次に、O1セルに次の数式を入力して下さい。 =IF(ISNUMBER(Sheet2!$C1),INDEX($A:$A,Sheet2!$C1)&INDEX($B:$B,Sheet2!$C1)&INDEX($C:$C,Sheet2!$C1),"") 次に、O1セルをコピーして、O2以下に貼り付けて下さい。 以上で、完了です。
お礼
ご回答ありがとうございます。 実際に試してみたところ、上手くできませんでした。 >次に、Sheet2のA1~B1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 >次に、O1セルに次の数式を入力して下さい。 >=IF(ISNUMBER(Sheet2!$C1),INDEX($A:$A,Sheet2!$C1)&INDEX($B:$B,Sheet2!$C1)&INDEX($C:$C,Sheet2!$C1),"") >次に、O1セルをコピーして、O2以下に貼り付けて下さい。 ↑この箇所ですが、2行目以下とは、今回の例ですと8行目までになるのでしょうか? また、O1セルとは任意のセルの1行目という事ではないですよね? 別回答でマクロを使用した手段があるのですが、こちらの方法でも挑戦してみたいので、 もし宜しければ、ご教授の程、宜しくお願い致します。
エクセルでバーコード変換は聞いたことありませんが バーコードを読み込んだものを表示することは可能です そういう類ならアクセスでどうぞ アクセスならバーコードは設定一つで出来ます エクセルにしろアクセスにしろ 例題のような繰り返し処理回数が固定で、まったく同じ文字列なら マクロで処理は可能です
お礼
ご回答ありがとうございます。 手段は多々あるようですので、色々チャレンジしてみます。 ありがとうございました。
お礼
ご回答ありがとうございます。 このようなマクロを使う手段もあるのですね。私はプログラミング関連はさっぱりですので勉強になります。 上手く動きましたので、この手段をメインに作業していきたいと思います。 ありがとうございました。