• 締切済み

VBA 縦のデータを横にするコード

VBA初心者です。 縦に複数の顧客が存在して、その顧客の出荷日をセル一つにまとめたいのですが、全くがやり方が わかりません。すいませんが、教えて頂けると幸いです。 【例】 ■シート1    A列   B列 1  番号  出荷日 2  005   2014/5/1 3  001   2014/5/5 4  003   2014/5/23 5  003   2014/5/14 6  001   2014/5/3 7  005   2014/5/8 8  001   2014/5/16 9  001   2014/5/4 ↓↓↓↓↓↓↓↓↓↓ ■シート2    A列   B列 1  001    2014/5/5、2014/5/3、2014/5/16、2014/5/4 2  003    2014/5/23、2014/5/14 3  005    2014/5/1、2014/5/8 上記のように処理することは可能でしょうか。 宜しくお願い致します。

みんなの回答

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

こんばんは! シート1・シート2 とあるので、Excelだという解釈で・・・ 複数の日付を別セル表示させるのではなく、B列1列だけに表示させたいのですね? 一例です。 標準モジュールにコピー&ペーストしてマクロを実行してみてください。 尚、Sheet1、A列の表示形式はユーザー定義から 000 と3桁表示させているという前提です。 Sub Sample1() Dim i As Long, k As Long, lastRow As Long, str As String, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False wS.Cells.Clear With Worksheets("Sheet1") .Range("B1").Copy wS.Range("C1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("B1"), unique:=True wS.Range("B1").Sort key1:=wS.Range("B1"), order1:=xlAscending, Header:=xlYes For i = 2 To wS.Cells(Rows.Count, "B").End(xlUp).Row .Range("A1").AutoFilter field:=1, Criteria1:=Format(wS.Cells(i, "B"), "000") Range(.Cells(2, "B"), .Cells(lastRow, "B")).SpecialCells(xlCellTypeVisible).Copy wS.Range("A2") For k = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row str = str & wS.Cells(k, "A") & ", " Next k wS.Cells(i, "C") = Left(str, Len(str) - 2) str = "" wS.Range("A:A").Clear Next i wS.Range("A:A").Delete wS.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous .AutoFilterMode = False wS.Columns.AutoFit wS.Activate wS.Range("A1").Select End With Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

gke123
質問者

お礼

早急のご回答誠にありがとうございます。 そのままモジュールにコピペしたら、できました!!! ずっと悩んでたので、稼働しました。 ありがとうございます!(^^)!

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

関連するQ&A

  • VBA データを戻すコード

    おはようございます。 データを戻すコードが分からない為質問させていただきます。 やりたいこと 前提として シート2やシート3は A1からC100セルまで文字が書かれています。 シート1に A1からC200セルまで文字が書かれています。 そのセルのAセル以外の範囲(B1:C200)のどれか が変更が有れば(例:B110セルが変更なら110行目をコピーする) その変更された行をコピーし シート2やシート3内をAセルの行(1から100行まで)検索し シート1の110行目のAセルの文字とAセルの文字が当てはまったら (例A30セルに同じ文字が有れば) シート1でコピーしたセル (上の例であれば110行目コピーされたもの) を30行目に貼り付けを行う。 といった処理をしたいのですが 出来ましたらコードを記載していただきたいです。 すいませんが回答よろしくお願いいたします。

  • VBAで2つのリストボックスの連動表示に関して

    VBAで2つのリストボックスの連動表示に関して、 ご教授、お願い致します。 VBAで色々、試行錯誤しております初心者です。 今回の質問ですけど、参考にWebで調べたのですが 分からなく、どのようにしたらいいのか 教えて頂けないでしょうか。 (例 リスト表) Sheet1(取引名簿)    (No.) (取引番号) (取引社名)                      A列    B列     C列    ・・・                1   1   A-0001     A社    ・・・             2   2   B-0001 B社     ・・・ 3   3   A-0002 C社    ・・・ 4   4   A-0003  D社     ・・・ 5   5   B-0002 E社    ・・・ ・ ・ ・ Sheet2(顧客名簿) (No.) (取引社名) (顧客名) A列    B列     C列   ・・・ 1   1 A社     顧客1 ・・・ 2   2     B社 顧客2  ・・・ 3   3    A社   顧客3 ・・・ 4   4    C社   顧客4 ・・・ 5   5 A社 顧客5 ・・・ ・ ・ ・ 上記、例題 2つのシートリストを条件に合わせ、2つ目のリストボックスに 連動表示させたいのですが処理できるように教えて頂けないでしょうか。 ※ ListBox1 に Sheet1 の B列(取引番号) と C列(取引社名) を表示し、 ListBox2 には、 Sheet1 で選択した取引会社に連動し、 C列の顧客(条件一致者)全員を ListBox2に表示したいのです。 (例) ListBox1でSheet1の中からA社を選択したとします。 連動でListBox2には、A社の顧客1、顧客3、顧客5が表示するように出来ないでしょうか。 説明下手で申し訳ありませんが宜しくお願い致します。

  • エクセルVBAによるマトリクス表の縦配列

    エクセルVBAで以下のような処理を行うプログラムを作成したいのですが、 シロウトなんで、なかなかスマートに作れません。 どのようにすればいいかご教示いただけたら有り難いです。 (1)下記のように、縦横のマトリクス表にデータが入力されている。   A B C ・・ 1 2 3 ・ ・ (2)これを別シートに縦に2列にデータを並べるように処理する。  左列には"列項目&行項目"、右列には該当するデータをセットする。 A1  A1のデータ A2  A2のデータ  A3  A3のデータ ・   ・ B1  B1のデータ ・   ・ ・   ・ (3)尚、列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、 処理を繰り返すかたちにする。 以上のような条件ですが、よろしくお願い致します。

  • Sheet1のデータを条件で行ごと抽出するVBA

    ExcelのVBAについて質問です。 Sheet1  | A | B |  C  |  D | E 1| 5/12|青森|出荷済|11個|りんご 2| 5/12|静岡|準備中|10缶|お茶 3| 5/12|愛媛|未出荷|21個|みかん 4| 5/12|新潟|未出荷|99粒|おこめ 5| 5/12|栃木|出荷済|15個|巨峰 こんなシートがあります。 これを、シート状のボタンをクリックしたときに、 「C列が"出荷済"または"準備中"の行だけ抽出して、列を入れ替えながらSheet2に並べる」 というVBAを組みたいです。 ボタンを押した後Sheet2がこんな感じになるようにしたいです。 Sheet2  | A  | B | C |  D | E 1|りんご|11個|5/12|青森|出荷済 2|お茶 |10缶|5/12|静岡|準備中 5|巨峰 |15個|5/12|栃木|出荷済 列の入れ替えはこのような感じです (Sheet1⇒Sheet2) E列⇒A列 D列⇒B列 A列⇒C列 B列⇒D列 C列⇒E列 行はSheer1の順番をSheet2でも抽出されない行を詰める形で維持したいです。 また、ボタンを押されるたびSheet2が全て上書きされる形で構いません。 抽出と入れ替えのヒントだけでもお教え頂ければ自分でやってみたいと思います。 よろしくお願いいたします。

  • VBAにて、複数シートからデータを抽出

    エクセルVBAです。複数のシートからの集計、抽出の書き方について教えてください。 1つのファイルに50ほどのシートがあります。 各シートの列数やフォーマットは、同じですが行数は、異なります。 例 sheet1(シート名:集計):集計用   A    B    C       D     1 ※検索キーワードを入れるセルや 2   マクロを登録するボタン用として2行開けてある。 3 番号 氏名  郵便番号  住所  sheet2(シート名:STU)   A    B    C       D      1 番号 氏名  郵便番号  住所  2  1  AB   345    YZ 3  1  CD   678    QS sheet3(シート名:XYZ)   A    B    C       D      1 番号 氏名  郵便番号  住所  2  2  AB   345    YZ 3  2  CD   678    QS 4  3  CD   678    QZ 抽出前は、上記の様なファイルとなっております。 上記では、4列としてますが実際は、23列あります。 また、sheet3までですが、実際は、40~100シート位あります。 sheet1(シート名:集計):集計用   A    B    C       D     1     ※検索キーワード:氏名_CD としマクロを実行する  2       (↑例として氏名でフィルタリングしてますが他の指定項目でも実行したい、複数条件は、無)   3 番号 氏名  郵便番号  住所 4  1  CD   678    QS    (←sheet2(シート名:STU)の3列目) 5  2  CD   678    QS  (←sheet3(シート名:XYZ)の3列目) 6  3  CD   678    QZ  (←sheet3(シート名:XYZ)の4列目) ・  ・  CD    ・      ・ (←sheet4(シート名:・・・)の・列目) ・  ・  CD    ・      ・ (←sheet10(シート名:・・・)の・列目) ・ ・  CD    ・      ・ (←sheet27(シート名:・・・)の・列目) ・  ・  CD    ・      ・ (←sheet27(シート名:・・・)の・列目) ・ ・  CD    ・      ・ (←sheet30(シート名:・・・)の・列目) 上記の様にすべてのシートから氏名:CDでフィルタリングし集計シートに抽出したい。 よろしくお願いいたします。

  • 横のデータを縦のデータにしたい

    sheet1, A列(A4にはタイトル)に種類、B列(B4にはタイトル)に名前、E3:AI3に日付、E4:AI4に曜日、E5:AI5 , E9:AI9・・・・4行置きに数値データがあり、A,B列、および日付、曜日だけ関数を使い、それぞれこのシートにデータが出るようにしています。E5:AI5 , E9:AI9・・・・4行置きには任意に入れています ※A列、B列も4行置きに、データ内容が変わります、A列はA5からデータ、B列はB5からデータで、A5:A8には同一の種類、B5:B8には同一の名前が入っています、表の大きさはA4:AI5000あります、よろしくおねがいします sheet2,(写真のように)データ表示させたい

  • vbaにて並べ替えしたい。

    並べ替えするには? ただいまVBA学習中です。 sheet1に次のような文字列がセルに入力されているとします。 3列で30行あります。   A列 B列 C列 1行 あ  い  う 2行 え  お  か ...以下30行まで続く。 これらを sheet2に A列 あ い う え お か のようにひとつの列へ縦にするにはどのような記述になりますか? 私なりの考え方ですが セルのスタート位置はシート1のA1とします。  シート1にて  ・あ い う と順番に配列に格納  ・セルを左に2つ下に1つ移動   この動作を30回繰り返す(for next 使えばでいいですよね?)  シート2に移動してA1から下方向へ  格納された文字列を入力する。  と、考えてみたものの記述の仕方がわかりません。 力貸してください。   

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • VBAにてデータを振り分けたい。

    2つのシート(sheet1、sheet2)があり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  A   B   C   D (行)   1     山   川   地   空  2     ○   △   ×   □  3     ア   イ    ウ   エ (1)ユーザーフォームを作成し、その中にコンボボックスを作成して山を入力する。 山は、セルA1へ、川は、セルB2へ、地は、セルC3へ、空は、セルD1、それぞれ 決められたセルにコピーされる(すべてsheet1へコピー)。 (2)にコンボボックスにて○を入力する。○はセルA1へ、△は、セルB2へ、×は、 セルC3へ、□は、セルD1へ、それぞれ決められたセルにコピーされる(すべて sheet1へコピー)。 ちなみに(1)と(2)のコピーされるセルの位置は同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、まだよくわかりません。 出来れば、sheet1のセルに数式などを入力したくはないのですが...。 どうか皆様のご指導を宜しくお願い致します。

  • Excel VBAについて質問します。

    Excelのシート1のA列に 同じ番号や違う番号が入力されています。 A列には、この先番号が増えてくると思います。 A列の同じ番号が何個存在するかをカウントして数字で表示させたいです。 重複していない番号も1と数えていきたいです。 カウントした表示先は予めシート2に重複していない様にA列に存在しますので 同じ番号の横B列に何個存在するか個数を表示させる事はできませんでしょうか? VBAは初心者の為、お手数をおかけしますが宜しくお願いします。

このQ&Aのポイント
  • オリーブオイルの賞味期限は過ぎても食べられるのか気になる方も多いでしょう。特にケトジェニックダイエットを実践している方にとっては、オリーブオイルは重要な食材です。今回は、18ヶ月賞味期限を過ぎたオリーブオイルが食べられるかどうかについて検証してみましょう。
  • オリーブオイルは酸化しづらい油であり、賞味期限を過ぎても食べることができます。しかし、酸化度が高くなると風味や栄養価が低下する可能性があります。賞味期限を過ぎたオリーブオイルの風味や品質を確認するためには、見た目や香り、味をチェックすることが重要です。
  • 賞味期限を過ぎたオリーブオイルが悪い油になっているかどうかは、酸化度によって異なります。通常、賞味期限を過ぎたオリーブオイルは食べられる範囲内であり、問題はありません。ただし、品質や風味が落ちる可能性があるため、新しいものと比べてマイルドな味やのどごしであることがあります。過ぎたオリーブオイルを食べる際には、香りや味を確認して判断することをおすすめします。
回答を見る