• 締切済み

エクセルで、顧客データを別のシートの表に項目ごとセルに振り分けたい

エクセル97を使っています。 Sheet1に既に作られた顧客のデータをSheet2の表に挿入したいのですが、 データシートは1行で1名分なのに対し、表シートは2行で1名分になっています。例えば、 Sheet1 の A1 が Sheet2 の A1 に入り、 Sheet1 の A2 が Sheet2 の C1 に入り、 Sheet1 の A3 が Sheet2 の A2 に入り、 Sheet1 の A4 が Sheet2 の B2 に入り・・・ といった具合に、Sheet1と2では項目もバラバラです。 = の前に ' を付けて後で区切り位置で変換する、という方法を以前こちらで教えていただいたのですが、うまくマクロを作ることが出来ません。 更に、顧客データの数の変動が激しいので、表シートの行数をデータの数の分だけ自動に増やしたいのですが、やり方が見つかりません。 すみませんが、どなたかアドバイスをお願い致します。

  • Kaboo
  • お礼率31% (19/61)

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問の意味がつかみ切れないため、かなり想像しての回答です。要は1行のデータを2行に振り分ければいい? >Sheet1と2では項目もバラバラです とありますが、顧客単位では振り分け方法は同じとしています。パターンがなければお手上げです。また、 >データシートは1行で1名分なのに対し、表シートは2行で1名分になっています とありますが、質問の例示では4名分が2行になっているように思えます。Sheet1のA1、A2、A3、A4はA1、B1、C1、D1として考えています。これが違っていれば下記モジュールは破棄して下さい。また、 >更に、顧客データの数の変動が激しいので は、データの追加のことだと解釈しました。下記で一応対応できます。しかしシート1で行削除してもシート2は変化しません。シート2をクリアして全件書き直せば大丈夫でしょう。 下記マクロにはdtNumに項目数を、Sht1Adr、Sht2Adrに項目数分のセルの対応を設定します。 標準モジュールに貼り付け、シート1のシート2に振り分ける開始行を選択して実行します。全件書き出すなら1行目を選択して実行します。 ご参考に。 Public Sht1Adr() As String 'Sheet1のセル位置(1行目) Public Sht2Adr() As String 'Sheet2のセル位置(1行目と2行目) Public Const dtNum = 4   'データ項目数をセットする 'シート2に振り分けるシート1の開始行を選択して実行 '=== シート1の1行目を選択していれば全件振り分け '=== シート1の追加開始行を選択していればシート2に追加 '=== 削除は対応していないので、いつも全件振り分けがベストか Public Sub Sheet1_To_Sheet2()   Dim ws1 As Worksheet, ws2 As Worksheet  'シート1、2     Set ws1 = Worksheets("Sheet1")     Set ws2 = Worksheets("Sheet2")   ReDim Sht1Adr(dtNum) As String      'シート1の1行目のデータ位置   ReDim Sht2Adr(dtNum) As String      'Sht1Adr()に対するシート2の位置     Sht1Adr(1) = "A1": Sht2Adr(1) = "A1" '==シート1のA1をシート2のA1に書く     Sht1Adr(2) = "B1": Sht2Adr(2) = "C1" '==シート1のB1をシート2のC1に書く     Sht1Adr(3) = "C1": Sht2Adr(3) = "A2"     Sht1Adr(4) = "D1": Sht2Adr(4) = "B2" '以下、データ項目数分書き込む     'Sht1Adr(5) = " 1": Sht2Adr(5) = " 2" '  ↓   Dim rwStart As Long  'シート2に振り分けるシート1の開始行   Dim rw As Long     'シート1の行   Dim col As Integer   'シート1の列   rw = Selection.Row   While Cells(rw, 1) <> "" 'シート1のA列にデータがあるだけ繰り返す     For col = 1 To dtNum       ws2.Range(Sht2Adr(col)).Offset(rw * 2 - 2, 0) _           = ws1.Range(Sht1Adr(col)).Offset(rw - 1, 0)     Next     rw = rw + 1   Wend End Sub

Kaboo
質問者

お礼

質問が下手で大変申し訳ありませんでした。 丁寧にご回答を頂き、ありがとうございました。 作って頂いたマクロをそのまま貼り付けて、必要個所を直して実行してみたのですが、うまくいきませんでした。 まだマクロは初心者なので、もう少し勉強してからまた改めてご質問させて頂きたいと思います。

  • urk
  • ベストアンサー率33% (18/53)
回答No.1

具体的に「sheet1データ」と「sheet2表」との関連づけがよく分かりませんので何とも言えないのですが。 こちらの勝手な想像ですが、sheet1に入力したデータを元に、sheet2の印刷用の表等を作成すると言うことで考えると、 sheet1の項目とsheet2表の位置関係はバラバラではなく、有る一定のルールが有ると思うので、そのルールで、sheet1のデータを読み込んで、sheet2の表に順次転記する様なマクロを考えればよろしいのではないのでしょうか。

Kaboo
質問者

お礼

説明が下手で、大変申し訳ありませんでした。 アドバイスを頂き、ありがとうございました。

関連するQ&A

  • VBAマクロ:データシートから情報を抽出して顧客別の出荷表を作成したい

    いつもこちらではお世話になっています。 ありがとうございます。 今回はマクロで以下のようなことをしたいと考えていますが、どんな組み方がいいでしょうか? いつもながら勉強不足で申し訳ありませんが、お力を貸して頂ければと思います。 まず、下記のようなデータシートがあります。 日付    商品名     顧客コード 9/10   みかん      A0001 9/12   ぶどう      A0002 9/13   いちご      A0001 9/13   いちご      A0002 9/18   鶏肉       B0013 このデータシート上で(例えば)ボタンを押すと 一度に各顧客毎の「出荷表(納品書)」が作成される(別ファイルで保存される)、というようなマクロを組みたいのです。 …A0001の出荷表は、9/10,9/13のデータが載っているものになります。 (これがそれぞれA0002、A0013の分も同時に作成されてそれぞれ別ファイルで保存される形で) データシートと別に「出荷表(納品書)」ひな形シートを作って、 1行ずつひな型に流し込んでいこうかな?と考えてみたのですが、 (顧客コードで並べ替えをしてから、コードNOがかわる前の行まで 流し込んで別名でファイル保存してみる、とか…でもこれだと 切り替わったあとのコードの分の処理をどう進めてよいかわからず)どうもうまく考えがまとまりません。 どうかよろしくお願い致します!

  • エクセル シートに表をまとめる

    良い方法を教えてください。 まず、ある専用のソフトからデータを抜きエクセルにおとします。 そのデータが小分けされていて、表の形式で、金額等が記載されているのですが、8列6行くらいの表でいくつもデータがあります。 しかも1シートに1つの表しかなく、何個もシートがある状態です。 それを、切り取りして張り付けして…と1シートにまとめているのですが、計算式やマクロなどを使用して、データを抜いたら1シートにまとまるようにしたいのです。 何か良い方法はないでしょうか?? データは、毎月抜きますが、データの表の行数、列数は毎月同じです。 宜しくお願いします。

  • エクセルで2つの項目を下から規定数のデータでグラフ

    15枚のシートに同じ書式の表がありそのシート上に任意の2列の列データを下から30個指定してグラフ化したいのです。 表に空白セルは無く、データ数が30個以下の場合は全数でグラフ化したい。 製品A、製品B・・・というように製品名のシートが15枚あります。 この表の2列のデータを下から30個でグラフ化したく。列は固定することも可です。 データ数や項目行やデータの開始行は下記の様にコード中で指定でも問題なく使用できると思いますが、もし可能なら添付の図のように決まったセルから指定できれば最高です。 コード中での指定の場合表がずれた場合に不都合になってしまいますが、今のところ表の位置を合わせることもできそうですので必須条件ではありません。 Const MaxRows = 30 'データ範囲に指定する最大行数 Const ColNum1 = 5 '1つ目データ格納列 Const ColNum2 = 7 '2つ目データ格納列 Const SRowNum = 17 'データ開始行番号 Const KoumokuRow = 5 '項目名格納行番号

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

  • Excel 別シートのデータを自動で並べ替えつつ表

    お世話になります。 Excelで、以下のように2つのデータが並んだ表があるシート(1)を作ります。     A    B    C   F 1 タイトル 販売数 廃棄数 2 ●●●    50   20 3 ▲▲▲   45   30 4 ✕✕✕   40   35 このシートを複製し、全く同じシート(2)を作ります。 この時、シート(1)は販売数順、シート(2)は廃棄数順に並べつつ、両シートが連動するようにする方法はありますでしょうか? イメージ的にはシート(1)で追加・修正すると、自動でシート(2)にも反映するような。 LARGE関数等でやってみようと思いましたが、完成されてるデータならまだしも、行を追加したりするとズレてしまいます。 説明も表も下手で申し訳ないですが、分かる方いたら教えていただければ幸いです。

  • book1シート1のデータを別bookシートに移す

    a1シート1のデータ1,2(データ1.5列G行~18列G行,~9000個、データ2.25列G行~38列G行,~9000個)を b1シート1,c1シート1に移行したいのですが、 a1シート1のデータは、9000個と9000個とします。 b1シート1,c1シート1は、16000個前後をできれば最大にしたいと考えています。 このとき移行したいb1シート1(5列G行~18列G行,~16000個)は最終行からでてしまいます。 でてしまう分をc1シート1(5列G行~18列G行,~2000個)に書き移したいと思っています。 分かりやすくと思い9000個と書きましたが、データにより数は、異なっています。 このとき、データ1とデータ2の連結は、空白行なしです。 b1シート,c1シートは、a1シートとは、別bookです。 こんなときのマクロを教えていただければと思い質問しました。 マクロ記録でしましたが、うまくできませんでした。 コードを教えていただけませんか。 よろしくお願いします。 m2010です。

  • エクセルでセルの参照

    見積もり書をエクセルで毎回手打ち(A4を何ページも)をしています。 そこで毎回悩むのが項目を途中で挿入したい場合に毎回全て一つづつ下へずらしています。 なぜならただの項目の羅列ではなく、1ページ分の上下に会社名など項目があるためにただ行を挿入することができません。 そこで考えたのですが別のシート(シートA)に項目を羅列していってそれを記入するシート(シートB)に参照するということです。 やってみたのですがうまく出来ません。 まず、 ・空白の欄には0を表示しないようにする →IFを使って””(空白)を挿入しました。 しかし、試しにシートAに内容を羅列して行を挿入してみたのですがシートBには空白行が挿入されずに数式が1行分飛ばされてしまいます。 =IF(A1="","",A1) =IF(A3="","",A3) =IF(A4="","",A4) となります。(A2に空白挿入) また、相対・絶対参照にしてもダメでした。 構想としてはマクロ(全くわかりませんが)でボタンを押すとシートBに情報が更新されるようなものもできるのかなと。 それならば空白を挿入しても、行を削除しても「更新」ボタンを情報が更新されるから問題ないのかなと。 ちなみに記入内容は、数字、文字両方あります。 よろしくお願いします。

  • エクセル:シートの分割

    お世話になります。 エクセルで、あるシートに任意の行数のファイルがあります。 1~6行目はタイトル行扱いで、7行目からがデータ部分になります。 この7行目からはじまるデータ部分を25行分ずつシート単位で分割したいのです。 1つ目のシートが分割前の本データとすると、2つ目のシートには1~6行目と7~31行目、2つ目のシートは1~6行目と32~56行目… というように。 必ず各シートの先頭は1~6行目部分になります。 1つ目のシートが分割前のシートで、2つ目以降に25行分ごとに分割されたシートがどんどん追加されていくイメージです。A列には必ずデータが入っているので、A列にデータが入っている最終行までが処理の対象になります。 追加するシート名は、分割1、分割2…というようにしたいです。 このような処理を自動化するマクロができれば教えてください。

  • 【エクセルマクロ】シート間のデータ切取⇒貼付マクロをくみたいです。

    シートが2つあって、それぞれ「商品・顧客マスタ3」、「取引終了データ」というシート名です。 「商品・顧客マスタ3」のシートの列A~Kまでをドラッグしている状態で「CTRL+SHIFT+U」 をおすと、切り取り処理されて、「取引終了データ」シートの同じA~Kまでに「すべて貼り付け」されるマクロをつくりたいのですが、スキル不足からできません。ぜひ教えていただけないでしょうか? 【備考】 ・「商品・顧客マスタ3」シートのドラッグしている行は様々で1行限りのときもあれば、5行(超え)等になるときもあります。列はつねにA~Kまでです。例 5行のとき⇒A401~K405までをドラッグしている状態。常に連続しています。 ・「取引終了データ」の貼り付け位置はA~K列の文字が入っていないところの一番最初の位置にしたい  です。現在では、A1~K402までデータがぎっちり入っていて、A403を先頭に切り取ったデータを貼り付けしたいです。(データのはいっていないA列の一番上にはりつけできれば十分です。) ・貼り付け後は、「商品・顧客マスタ3」の空欄になったところを「削除」して上方向につめたいです。削除は行  全体ではなく、列A~Kまでとしたいです。 なお、EXCEL2002をビスタで使っています。 お手数をおかけいたしますが、ぜひよろしくお願いいたします。

  • 【エクセル】シートからシートへの差し込み

    エクセルの使い方でわからないので教えてください。 初心者ですので、VBAやマクロといったことはまったくわかりません。。。 シート1に顧客データ約400件、シート2に表があります。 シート1の中の 銀行名、支店名、種目、口座番号、口座名義、フリガナ、振込金額を シート2の振込送金依頼書に15件づつ差込していきたいのです。 顧客データは1行に1顧客分なのですが、 振込送金依頼書は1件分が2行になっていて、 銀行名、支店名、種目、口座番号、振込金額の欄は2行のセルを結合していて、口座名義とフリガナ部分が2行に配置されており、 セルのコピー機能ではうまくできません。 この、口座名義とフリガナ部分を簡単に差込していきたいのです。 説明が下手で申し訳ないのですが、お分かりになる方教えてください。

専門家に質問してみよう