• 締切済み

CSVファイルの加工について

いつもお世話になっております あるデータベースのデータを他で利用するために 教えていただきたいのですが 下記のようなCSVファイルがあります ID |会場  | 日時    |時間帯|利用者 ________________________ 001 |会議室 |2007年2月28日|午前 | 001 |会議室 |2007年2月28日|午後 | 001 |     |           |    |東京花子 002 |研修室 |2007年3月2日 |午前 | 002 |研修室 |2007年3月2日 |午前 | 002 |     |           |    |大阪次郎 上のようなデータを 下記のように、 IDが一致するデータを アクセスまたはExcelのVBAで結合させるには どのようにすればよいか教えてください ID |会場  | 日時    |時間帯|利用者 ________________________ 001 |会議室 |2007年2月28日|午前 |東京花子 001 |会議室 |2007年2月28日|午後 |東京花子 002 |研修室 |2007年3月2日 |午前 |大阪次郎 002 |研修室 |2007年3月2日 |午前 |大阪次郎 実際はフィールドがたくさんあるので 手動ではなく、プログラム的に処理したいと考えています よろしくお願いします

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。8行目を以下に換えてください。1行目は書き換えないようにします(数字の1を2に換えるだけです)  For idx = Range("A65536").End(xlUp).Row To 2 Step -1

hasmiya
質問者

お礼

早速の対応ありがとうございました うまく動作しました。

hasmiya
質問者

補足

お礼に記載すればよかったのですが 一旦結合が終了したデータシートで もう一度同じマクロを動かしてしまった場合 下記のように 「利用者」の部分が消えてしまいます ID |会場  | 日時    |時間帯|利用者 ________________________ 001 |会議室 |2007年2月28日|午前 | 001 |会議室 |2007年2月28日|午後 | 002 |研修室 |2007年3月2日 |午前 | 002 |研修室 |2007年3月2日 |午前 | 操作ミスでのデータ消去を防ぐという観点から 対処法があれば教えていただきたいのですが 甘えてばかりで申し訳ありませんが よろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

B列が空白である行の複数列の値を、その行のより上にあるセルに書き込むエクセルマクロです。テストした結果は質問文のとおりになりました。 ただフィールド(列?)がたくさんあるとのことなので、複数列を一度に処理できるようにしてみました。6行目に処理したい列をカンマ区切りで列記して下さい。 マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。 なおマクロ実行前にブックは必ずセーブしておいてくださいね。 Sub Macro1() Dim idx, par As Long Dim COL As String Dim ar Dim wk()  ar = Array("E", "G") '←ここに転記する列を書く  ReDim wk(UBound(ar))  For idx = Range("A65536").End(xlUp).Row To 1 Step -1   If Trim(Cells(idx, "B").Value) = "" Then    For par = 0 To UBound(ar)     wk(par) = Cells(idx, ar(par)).Value    Next par    Rows(idx).Delete   Else    For par = 0 To UBound(ar)     Cells(idx, ar(par)).Value = wk(par)    Next par   End If  Next idx End Sub

hasmiya
質問者

お礼

早速の回答ありがとうございました。 ただ、実際のシートで実験してみると ID |会場  | 日時    |時間帯|東京花子 ________________________ 001 |会議室 |2007年2月28日|午前 |東京花子 001 |会議室 |2007年2月28日|午後 |東京花子 002 |研修室 |2007年3月2日 |午前 |大阪次郎 002 |研修室 |2007年3月2日 |午前 |大阪次郎 のように、 ar = Array("E", "G") '←ここに転記する列を書く の部分で、追記した列のタイトルまで書き換えてしまいます 実際は ar = Array("G", "H","I") と記入してあります。 対処法はあるでしょうか? よろしくお願いします

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

関連するQ&A

  • ファイルメーカーのリレーについて

    受付のファイル 名 前 (予約した人の名前)  ●会議室 (第1会議室 午前)   日 付 19年7月12日  ●会議室 (第1会議室 午後)   日 付 19年7月12日 第1会議室AMの台帳ファイル 日 付 19年7月12日 名 前 (予約した人の名前) 第1会議室PMの台帳ファイル 日 付 19年7月12日 名 前 (予約した人の名前) 第1会議室 夜の台帳ファイル 日 付 19年7月12日 名 前 (予約した人の名前) 例は一つの会議室だけ書いてありますが、3つの会議室を午前、午後、夜の時間で管理したいと考えています。一つの受付ファイルで一度に複数の会議室の予約をし、それを各会議室の台帳ファイルにリレーしたいと考えていますが、日付だけだとすべての会議室に同じデータがリレーされてしまいます。どうにかして、日付と会議室を区別してリレーすることができないでしょうか。どなたか方法を知りませんか。

  • 一覧の表示で名前をデータ数を表示したいのですが…

    お世話になります。 度々申し訳ないのですが、質問させてください。 現在mysqlに格納したデータの一覧を表示するページを作っているのですが、表示結果が思うようにいかず困っています。 環境:Mysql 5.1.22-rc,PHP  5.2.5 データベース:test01 main -------------------------------------------------------- id name kana 1 太郎 たろう 2 次郎 じろう 3 花子 はなこ -------------------------------------------------------- sub2 -------------------------------------------------------- id a_sakuhin   title 1 data_1   青空   1 data_2   夕日 1 data_3   流星   3 data_1   町並み 3 data_2   列車   -------------------------------------------------------- というテーブルがあります。 それを一覧表示で ・太郎 (3) ・次郎 (0) ・花子 (2) という具合にしたいのですが、どうしても()の中が全件合わせた結果になり ・太郎 (50) ・次郎 (50) ・花子 (50) という様になってしまうのです。 どういったsql文を書けばよいのかアドバイスを頂けると嬉しいです。 よろしくお願いいたします。

  • 関数を使って重複するデータを抽出するには?

    今各年度の重複データの抽出の方法がわからなくて困っています。 H20年度         平成21年度 ID   氏名   住所  ID   氏名   住所 102 山田太郎  東京  505 山田次郎  福岡 205 山田花子  京都  603 山田五郎  滋賀 505 山田次郎  福岡  205 山田花子  京都 のような表があって H20と21で重複する人を別表に抽出したり、逆に重複しない人を抽出するにはどのような関数を使えばいいのでしょうか? よろしくお願いします

  • ファイルのプロパティについて

    スマホで写真を撮り PCに写真のデータをコピーしると プロパティが変更されます。 例 スマホの写真 作成日時 2014年12月22日 更新日時 2014年12月22日 のデータを 2015年2月13日 に スマホからPCに写真データをコピーしてプロパティを確認すると 作成日時 2015年2月13日 更新日時 2015年2月13日 と変更されてしまいます。 プロパティを変更しないでのコピーは可能ですか?

  • 特定の文字を削除したい

    <元データ> 1955/03/08,東京太郎BD,東京 営業 1978/12/28,山田花子S,横浜 管理 1970/07/07,佐藤次郎KK,東京 管理 といったCSVデータから特定の文字(名前後のローマ字/1or2桁)をPerlを使用して削除する方法を教えて下さい。 <実行後> 1955/03/08,東京太郎,東京 営業 1978/12/28,山田花子,横浜 管理 1970/07/07,佐藤次郎,東京 管理 宜しくお願いします。

  • 職場の事業戦略検討会にお勧めの施設をご紹介ください!

    東京の会社で企画業務を担当しています。 私の職場では、半年に1回程度、中堅・若手社員を集め、 講義やグループ討議での戦略検討を実施しています。 通常、大阪で良い施設があり、そこを利用してるのですが、 今回(10月)は予約が取れませんでした。 そこで、東京でよい施設をご存知の方おられたら教えて頂けませんか? 【必要とする条件】 (1)大会議室(30-40名)と小会議室(10名程度)がある (2)宿泊(ツインルーム)と食事(宴会)の施設がある (3)会場が研修等の運営に慣れている (4)できるだけ安い費用で 以上、宜しくお願い致します!

  • ファイルメーカーの計算式のことで

    ファイルメーカーの計算式のことでお伺いします。 名前のことですが、例えば2006年3月31日までは、田中花子で改姓して2006年4月1日から山田花子になったとして、表示上は2006年3月31日までは田中花子で2006年4月1日からは山田花子にしたいのです。 基準日の設定してなんとかなりますか?

  • Excelファイルから住所宛名印刷をする方法

    Excelファイルから住所宛名印刷をするにはどうするのでしょうか? Excelファイルに沢山の宛名と氏名が記入されています。これを使って封筒に貼り付けられるように宛名印刷をしたいのですが、どうすればいいのか分かりません。 例)Excelファイル>>> 山田太郎 〒555-5555 東京都AAAAAAA 山田次郎 〒444-4444 横浜市BBBBBBB 山田花子 〒333-3333 大阪市CCCCCCC となっているのを宛名のフォーマットに合わせて _________________________ | | 〒555-5555 | 東京都AAAAAAA |   山田太郎  | _________________________ | | 〒444-4444 | 横浜市BBBBBBB |   山田次郎  |     : と自動的に変換して印刷したいのです。 ご存じの方、教えてください。

  • 2つのファイルのレコードの差異を抽出したいのです。

    2つのファイルのレコードの差異を抽出したいのです。 ファイルAとファイルBがあります。 ファイルAの中身 id001,日本次郎,25才,東京都,2010/04/06,batch id002,日本花子,20才,千葉県,2010/04/06,batch ・ ・ ・ ファイルBの中身 id000,日本太郎,30才,東京都,2010/04/06,batch(Bにしか存在しない) id001,日本次郎,28才,東京都,2010/04/08,batch(年齢と更新日付が違う) id002,日本花子,20才,千葉県,2010/04/08,batch(更新日付だけ違う) ・ ・ ・ レコードは順不同です。 AとBを比較して同じid(一番左の値です)で更新日付と更新者(一番右です)以外が更新されていたらファイルCに書き出したいと考えています。 ※もしかしたら除外の項目が増えるかもしれないので、左から何文字(何項目)目同士で比較する方法は使うことができません。 どうすればできるか(レコードは数十万件以上になるので速度面も含めて)考えているのですが、何かよい方法はないでしょうか? 性能どころかまだ形にもなっていないので、取り合えず正しい結果を得られることだけを考えて下記のように進めています(それぞれの実装方法は調べながらですが)。 1.Aファイルから1行読み出す。 2.読み出した1行をカンマを区切り文字にして分解する。 3.Bファイルを1行ずつ読み込んで同じように分解して、2で分解したidと同じidだったら、更新日付と更新者以外を比較して違っていたらファイルに書き出す。 4.Bファイルに該当idがなかったらファイルに書き出す。 ※Aファイルの最終行まで2~4を繰り返す。 もっといい方法があると思うのですが、シェルスクリプトの経験がないためごり押しみたいな方法になっています・・・。 もしよろしければアドバイス頂けないでしょうか。

  • エクセルで複数条件を満たす値を表示する方法

     質問初めてで失礼しますが、よろしくお願いします。 エクセルにおいて  下記のようにシート「犬」に基礎となるデータがあります。     A   B  C  D  E   ・・・ 1        花子 太郎 次郎 2 1994 6月 200 100 320  3 1994 7月 700 300 500 4 1995 6月 800 500 100 5 1995 9月 900 800 300 6 1996 6月 500 200 200 ・ ・ ・  これを別のシート「猫」に花子の情報のみ一覧表示したいのですが、B3、B4・・・C3、C4・・・にどのような数式をいれればよいでしょうか?  なお、このようにして、太郎や次郎もシート毎に一覧表示させる予定です。    A B C D E   ・・・ 1 花子 2     6月 7月 8月 9月 3 1994  4 1995  5 1996  6 1997  7 1998  ・ ・ ・  よろしくお願いします。  

専門家に質問してみよう