• ベストアンサー

マクロで困っています。3列を1列に合体したいです

マクロ初心者なのですが、どなたか助けていただけませんでしょうか? 社名-番号1-番号2-番号3 T社 1 2 3 T社 1 2 3 T社 1 2 3 N社 1 2 3 N社 1 2 3 N社 1 2 3 O社 1 2 3 O社 1 2 3 O社 1 2 3 上記表があったとして、私がマクロでしたい完成表は下記です。 社名-番号1 T社 1 T社 2 T社 3 N社 1 N社 2 N社 3 O社 1 O社 2 O社 3 最終行は不定期です。 1社につき3行あったとして、番号2列と番号3列を番号1列に合体させたいのです。 どなたかお力をお貸し頂けませんでしょうか?

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 並び替えシートをSheet2にしています。 データシートのシートタブ上で右クリック→コードの表示→サンプルコード貼り付け→シート上でAlt+F8キー押下、sample実行 Sub sample() Dim i As Long, j As Long, db, wk Set db = CreateObject("Scripting.Dictionary") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For j = 2 To Cells(i, Columns.Count).End(xlToLeft).Column wk = Cells(i, "A") & "," & Cells(i, j) db(wk) = 1 Next Next With Sheets("sheet2") .Cells.ClearContents Cells(1, "A").Resize(, 2).Copy .Cells(1, 1) wk = db.keys For i = 0 To UBound(wk) .Cells(i + 2, "A").Resize(, 2) = Split(wk(i), ",") Next End With Set db = Nothing End Sub

layla-minami
質問者

お礼

空白行や同じ電話番号の列は削除されたようです? マクロを作るにも未熟なのでこのマクロを基に ちょっと自分で研究してみます!! 貴重なお時間頂きありがとうございました!!

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

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

どうしてもマクロを使いたいなら仕方がないが、使わなくても関数で簡単にできるし、関数なら、リアルタイムで変わる。 社名-番号1-番号2-番号3 が、A、B、C、D列の1行目で、2行目からデータがあるとすれば、 B2に、 =COUNTIF($A$2:A2,A2) として、最終行までフィルドラッグすればいい。すでに入っている1、2、3などのデータは関係ない。

layla-minami
質問者

お礼

関数のご指導ありがとうございます!! 今回は業務内容がマクロという無茶ぶりだったので、 使う機会がありませんでした。 次回使うことがあれば参考にさせて頂きます!! 貴重なお時間頂いて解説ありがとうございます。

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

関連するQ&A

  • エクセルのマクロ

    教えてください。   A     B   C 1 部品番号  ○   済印 2 111111   ○   済 3 222222   ○   済 4 333333   ○ という表があるとします。 B列にマクロのボタンを作っておき、 A列に部品番号を入力したら、マクロのボタンを押して、 C列に済、という字を表示したいのです。 1部品入力するごとに、その表示をさせたいです。 2行目、3行目・・・と一つずつマクロを登録して いく方法は、(マクロについては詳しくないので、マクロの記録、マクロの停止、という方法しかわかりません)入力するデータが100件以上あるため、それもどうかな・・と悩んでいます。超初心者なのですが、何とか完成したいと思っています。 よろしくお願い致します。

  • (excel)値が連続していた場合、削除してしまうマクロ

    ある列で、値(文字)が連続していた場合、 一番上の行のみ残し、他の行を削除 そして、番号を*-*と合体させたいのですが、、、 マクロをつかわなきゃいけないと思うんですけど 勉強中でなかなか完成できません! どなたかレクチャーお願いします! (例) 1 りんご 2 りんご 3 みかん 4 みかん 5 みかん 6 もも 7 もも  ↓ 1-2 りんご 3-5 みかん 6-7 もも

  • 表の数行の列を抜き出し一覧作成マクロ

    電話回線の仕事をしていますが、 別チームから 「送られてきた請求書がどれか分からないので、電話会社からの請求書の宛名に、お客様の名前を入れてほしい」 と言われました。 宛名に書くと、お客様の社名がもろに表出されているため、 セキュリティ上良くないと考え、 案件に所定の工番をつけ、それと照合で分別してもらおうと思います。 Excel2003で作成されている契約一覧の表があるのですが、 ここから ・案件番号 ・顧客名 ・請求書送付住所 etc… といった、必要な数行の列だけ抜き出し、一覧を別途作成して別チームに渡したいです。 行は日々更新されますので、 最新までの範囲でいくつかの列を抜き出せるマクロを作りたいのですが、 どう作ったらいいか全く分からず。 該当するマクロが載っているHPか、マクロその物をご紹介いただけないでしょうか。 よろしくお願いいたします。

  • こういうマクロの作成は可能でしょうか?

    こういうマクロの作成は可能でしょうか? 添付画像を参照いただきたいのですが、 I列の商品が一致するときに、H列に産地(G列)の合体版を 自動で入れるマクロを考えております。 まとめて範囲選択して、マクロ実行で完成するのを作りたいと思っています。 ※できれば例のように○○県産の「県産」は最後のみ入れる形が希望です。 同じような作業が、毎日10箇所くらいある為、マクロを作りたいんですが 知識不足で自分ではできません。 どなたかお力を貸していただけませんでしょうか? よろしくお願いします。

  • エクセルのマクロ作成で困っています。任意の列(〇列1行目)から0001

    エクセルのマクロ作成で困っています。任意の列(〇列1行目)から0001-安部 0002-安藤 0003-木下・・と入力された列があります(番号は3桁あるいは4桁です)。そして、例えば最後の入力されたセルの行番号が56だとして、そこに入力されたものが「0056-名前」であるか確認するマクロを作りたいのですが、どのように記述すればよいでしょか?確認したいのは番号(この場合'0056')のみで良いのですが・・。

  • マクロでマスタ表からフィルタ表と同じデータ抽出

    仕事で不定期ですが月に4~5回マスタ表が届きます。 その表から私の担当している部品のみ抽出するフィルタ表があり 素人ながら簡単な録画マクロで処理を行っています。 (マスタ表から抽出フィルタを使いフィルタオプションで抽出して新しいシートに出力) 但し、毎回マスタ表の最終セルの座標をマクロの編集で記載してから実行しており何とか自動で最終セルを認識してくれないかと色々調べましたが思うように動いてくれません。 マスタ表は毎データ行数列数はバラバラですが部品番号などの位置はフォーマットとして共通です。約18000行で列は8行~23行 抽出用の担当フィルタは私が担当している部品で約500点ほどで不定期メンテナンスしており増減します。 本来であれば現在のマクロのソースを記載したいのですが会社にファイルがあるので一旦書き込みだけいたします。

  • (マクロ)カット&ペーストを列毎に繰り返したい

    下のように、A列から50列目までデータが入力されています。 各列、データは上から順に詰まっている状態です。 C列のように1つもデータが入力されていない列もあります。 ------------------------------------------ A列 B列 C列 D列 ・・・ Z001 Z003 Z004 Z002 Z005 ------------------------------------------ これを、「B列から順にデータをカットして、A列最終行の下にペーストする」という作業を、各列毎に50列目まで繰り返したいと思っています。 完成イメージは下記のようになります。 ------------------------------------------ A列 B列 C列 D列 ・・・ Z001 Z002 Z003 Z004 Z005 ------------------------------------------ 下記のようにマクロを組みましたが、無限ループになっているのか、強制終了となってしまいます。 どういうふうにマクロを組めばいいのでしょうか? 宜しくご教授お願いいたします。 Sub ADD() Dim i, j As Long For j = 2 To 50 '列番号指定 'B列1行目から順にセルが空白でなければカットする。 i = 1 Do While Cells(i, j).Value <> Empty Cells(i, j).Select Selection.Cut 'A列の最終行の1つ下の行に貼り付ける。。 Range("A1").Select Range(Selection, Selection.End(xlDown).Offset(1, 0)).Select ActiveSheet.Paste i = i + 1 Loop Next End Sub

  • Excelで列を非表示にするマクロ

    マクロ初心者なのですが、 Excelで印刷前に印刷しなくてよい列を非表示にしたいので、 列を非表示にするマクロを作りたいのですが、 うまくいかないので方法を教えていただきたいです。 表のA~Nにデータが入っていて、 CとGの列を非表示にしたいのですが。 よろしくお願いします。

  • 分割マクロ

    よろしくお願いします。写真のように、一つの文字列に空白スペースが何ヵ所かあり、それを3分割に分けたいのですが、M列からO列が欲しい結果なのです。しかし、5行目のようにスペースがないものは、N列にしたいのです‼find関数Len関数left.right関数を駆使して、やっても良いのでしょうが、5行目、6行目のようにスペースが、たくさんあるものは、時間がかかりそうです。結局のところ、最初と最後の文字列にを抜き出し、残りは、N列にしたいのです。なにか、良いマクロ教えて下さい。よろしくお願いします。尚、スペースは全角スペースです。

  • 表のばらばらの文字列をまとめるマクロ 関数

    以前、同じ内容の質問を聞いたのですが、少し条件を変えて質問です。 (1)左の表には数式が入っていて、この他にもう一つある表のデータに該当すると1列ごとにSMとかNPとか表示されるようになっています。 (2)この左の表は実際には136列あるので、結果を印刷すると一枚に収まりきらないのです。なので、右の表のように、最短の列に表示したいのです。 (3)この例ではたまたま1行に1個ずつしか文字列が入ってないので右の表は1列ですが、1行に付き2個以上文字列が入ることもあります。5個以上はほとんどないです。 (4)関数でできませんか? またはマクロでもいいです。 以前、回答でいただいた関数は =IFERROR(HLOOKUP("*?",$A1:$D1,1,FALSE),"") 又は =IF(COUNTIF($A1:$D1,"*?"),HLOOKUP("*?",$A1:$D1,1,FALSE),"") でしたが、これだと1行につき1個文字列があるときのみ可能です。 1行に付き2個以上文字列がある場合に、例えば空欄を削除して左に詰めるような感じでマクロでできないでしょうか?