• ベストアンサー

エクセルのデーターベース

エクセルでCSVファイルを取り込みます。 このCSVは毎日取り込んでいて、一回のファイルが大体50件くらいです。(1レコードあたり25項目あります・・・Y列まで) 今現在10000件くらいたまっています。  C列には’20090619’のように日付が数値になって入っています。 これをZ、AA,AB列に’2009’、’06’、’19’と入れていますが、この入れ方が、それぞれ上のセルからの数式のコピーで行っています。  この為、毎日インポートをするたびにZ、AA、AB列をドラッグ、下へコピーしなければなりません。 インポートするたびにZ,AA,AB列の数式も自動で下へ伸びてくれるようにはならないでしょうか? それとも、そもそも私の表の作り方がまちがっているのでしょうか? 教えて下さい。 よろしくお願い致します。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

A)手作業でフィルハンドルを使った数式のコピー。 B)手作業で[外部データの取り込み]時に元データを日付にする。 C)手作業でデータ作成後に[区切り位置]を使って元データを日付にする。 D)マクロで(B)を行う。 4つの方法を提示しましたが、実際に試されたのは? 結果どうだったとか、レスポンスがありませんけど。 マクロ化したいのなら、(B)の作業過程を[マクロの記録]してできたコードを参考にするのがベターです。 追加質問だけピンポイントにお応えしておくと、 >ちなみに”見出し行・・・1。”と”・・・他は標準(1)”は >それぞれどこですか? CSVファイルの見出し行も取り込みたいなら1行目からスタートする事になるので .TextFileStartRow = 2 を .TextFileStartRow = 1 に変更します。 .TextFileColumnDataTypes = Array(1, 1, 5) これは手作業で言えば[テキストファイルウィザード-3/3]で[列のデータ形式]を設定する箇所です。 Array(1, 1, 5)は、1 がxlGeneralFormat[標準]で、5 はxlYMDFormat[日付]です。 A列[標準],B列[標準],C列[日付] に設定する事を意味します。 D列以降省略すれば[標準]になります。 これらは[マクロの記録]とヘルプを参考にすれば、何となく見えてくるものがあるのではないでしょうか。 >CSVのファイル名は何でもいいんでしょうか? >ちなみに”jisseki20090601.CSV”です。 まずは提示したコードを実際に試してみる事です。 1)新規Bookで試す。 2)Excelの画面から[Alt]キー+[F11]キー同時押し。VBE(Visual Basic Editor)が起動。 3)VBEの画面から[Alt]→[i]→[m]キー順押し。標準モジュールが挿入。 4)標準モジュールに提示コードをコピーペーストして[F5]キーで実行。 ※コード内にカーソルを置いて[F8]キーだとワンステップずつデバッグモードで実行。 ※調べたい語句にカーソルを置いて[F1]キーでヘルプにクイックアクセス可能。 http://www.sanynet.ne.jp/~awa/excelvba/kouza.html http://www.asahi-net.or.jp/~ef2o-inue/top01.html #ちなみに#2のSinogiさんのコードも標準モジュールに置いて実行するようになっています。

messi37
質問者

お礼

返信遅れて大変申し訳ありません。 A,Bを試してみました。 Dはsinogiさんのもので初めて試してみました。 end-uさんのすごいですね。 CSVファイルはウィンドウから選択できるんですね。 予想以上の出来栄えです。 C列の他にD列も日付データだったのでarray(1,1,5,5)でうまくいきました。 大変感謝しております。 本当にありがとうございます。 Z列から、AE列まで数式を入れたかったので、これはSinogiさんのをアレンジして入れてみました。 これも好調です。 自分の想像以上の出来栄えに本当に感謝しております。 end-uさんはじめ、みなさん本当にありがとうございました。 返信のおくれや分かりにくい質問等、数々のご無礼お詫び申し上げます。

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

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

>インポートするたびにZ,AA,AB列の数式も自動で下へ伸びてくれるようにはならないでしょうか? 例えば最終データが 1000行まであって、その後1001行目から追加されたとして、 Z1セル選択、[Ctrl]+[↓]でZ1000が選択されますね。 そこからZ1000:AB1000を選択して右下コーナーのフィルハンドル(ちっちゃい■)をマウスでダブルクリックすると 隣接列の連続最終データまで数式をコピーしてくれますが、うまくいかない(Y列が連続してないとか)、 もしくは面倒だという事でしょうか? もしくは、元データを日付データに変換しても良いのなら、 [外部データの取り込み]でテキストファイルを取り込んだほうが融通が利きます。 [テキストファイルウィザード-3/3]で該当列の[列のデータ形式]を「日付」(YMD)にします。 または[データ]-[区切り位置]を使えばまとめて変換できます。 1列選択して[データ]-[区切り位置]の[区切り位置指定ウィザード-3/3]で[列のデータ形式]を「日付」(YMD)にします。 ただ、毎日の作業だったらマクロ化したほうが良さそうですけどね。 Sub Macro1()   Dim r As Range   Dim x      x = Application.GetOpenFilename("csvfile,*.csv")   If VarType(x) = vbBoolean Then Exit Sub      With ActiveSheet     Set r = .Cells(.Rows.Count, 1).End(xlUp).Offset(1)     With .QueryTables.Add(Connection:="TEXT;" & x, _                Destination:=r)       .AdjustColumnWidth = False       .TextFilePlatform = xlWindows       .TextFileCommaDelimiter = True       '見出し行も取り込むなら 1 。       .TextFileStartRow = 2       'C列が日付なら 5 。他は標準(1)。       .TextFileColumnDataTypes = Array(1, 1, 5)       .Refresh BackgroundQuery:=False       '名前定義削除       .Parent.Names(.Name).Delete       'QueryTables削除       .Delete     End With   End With   Set r = Nothing End Sub

messi37
質問者

お礼

回答ありがとうございます。 すみません、私はVBAかなりの初心者です。 これ、一生懸命入れてみたいです。 ぜひ教えてください。 CSVのファイル名は何でもいいんでしょうか? ちなみに”jisseki20090601.CSV”です。 >.TextFileCommaDelimiter = True >'見出し行も取り込むなら 1 。 >.TextFileStartRow = 2 >'C列が日付なら 5 。他は標準(1)。 >.TextFileColumnDataTypes = Array(1, 1, 5) ちなみに”見出し行・・・1。”と”・・・他は標準(1)”は それぞれどこですか? すみません、こんなことも分からないで…。 教えてください。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • 374649
  • ベストアンサー率38% (203/527)
回答No.3

Excelの日付をCSVで"20090619"と記述されているのですが、これではExcel本来の機能が使えません、わざわは"20090619"として日付データを記録したいというトビを他でみましたが。 "20090619"が"2009/06/19"となっていれば年、月、日付とExcelの機能を使って後で自由に加工処理できます。 以上のことから取り込んだ日付データの一番目を"2009/06/19"と書き換えて同じ日付の範囲までコピーすれば取り込んだCVSファイルはそのままで他の列にコピーする必要はないと思います。 "2009/06/19"という書式はExcelの基本的な知識なので検討してみて下さい、もし月を取り出したければ"=month("C*")"と他のセルに書けば簡単に取り出せます。 質問の回答にはなっていませんがちょっと思ったので!!!

messi37
質問者

お礼

回答ありがとうございます。 ご指摘のとおりです。 わかってはいるんですが、これは工場の管理コンピュータから出てくるファイルなので、私の手では変えられないんです・・・。 今は年、月、日はLEFT関数等を使って取り出しています。

全文を見る
すると、全ての回答が全文表示されます。
  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

CSVとして test1.csv データA列のみ 自ファイルとCSVは同フォルダにある 自ファイルA列の最下行にCSVデータを追加する 自ファイルBCD各列に同行のA列を参照する式がある 作業が終了するとCSVファイルは閉じる を記述してみました。 自ファイルのデータシートで実行すれば目的の動作をするようにしました。参考までに Sub test() Dim Rend, csvRend Rend = Cells(1, 1).End(xlDown).Row  ’自ファイルの最終行を確認 Workbooks.Open Filename:="test1.csv" ’CSVを開く csvRend = Cells(1, 1).End(xlDown).Row ’CSV最終行を確認 Range(Cells(1, 1), Cells(csvRend, 1)).Copy ’CSVのデータ範囲をコピー ThisWorkbook.Activate          ’自ファイル Cells(Rend + 1, 1).Activate       ’自ファイル最終行の次行を指定 ActiveSheet.Paste            ’貼り付け Range(Cells(1, 2), Cells(1, 4)).Copy  ’自ファイルB1~D1をコピー Range(Cells(Rend + 1, 2), Cells(Rend + 1 + csvRend, 4)).PasteSpecial      ’自ファイル データ追加行に貼り付け Windows("test1.csv").Close   ’CSVを閉じる End Sub

messi37
質問者

お礼

すみません。 昨日から一生懸命やっているのですが、どうしても自ファイルのコピーになってしまします。 これができれば、私のやりたいことが見事にできるような気がするのですが・・・。 何が悪いのでしょうか? 自ファイルの下にまた自ファイルができてしまうんです・・・。 CSVファイルの作り方が悪いのかな? エクセルで作った後CSVで保存しているんですが…。 すみません。 どこが悪いのか、よくわかりません。 VBAについては、最近勉強し始めたばかりの初心者です。

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

こんばんは。 予め数式を入力した計算ファイルを作っておくのはどうですか? 例えば「コピー用」、「計算」の2つのシートを作成。 シート「コピー用」にCSVを貼り付けるとシート「計算」に目的のデータ列が作成されるというように。 計算式が残るのが鬱陶しければ、計算終了後に値コピーで潰したい数式を数値にする。 マクロを使うのが一番手っ取り早そうですが、私はマクロが良く分からないので、上記のように計算ファイルを作成して利用しています。

messi37
質問者

お礼

回答ありがとうございます。 できれば一つのシートにしたいです。 私もVBAがよくわからないのですが、現在勉強中です。 やっぱりマクロがわからないとなかなか思い通りになりませんね。 一生懸命勉強します。

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

関連するQ&A

  • excelにて数式の列のズレ方を任意でセルコピーするには?

    Excelにて、A1からA10までの10個のセルに入力されている 全ての関数式を1列ズラした形でコピーしたいのですが、 (例えば =AA1*AA2  →  =AB1*AB2 みたいな) コピーする位置は2つズレていてC列にコピーしたいのですが、 そこにコピーをすると  =AA1*AA2  →  AC1*AC2 となってしまいます。 これをコピーして、 例えのように1つだけしかズレないようにするには どうすればよいのでしょうか? もちろんコピーするときは、A1:A10までをドラッグして 一度にコピーしたい事が前提です。 良い方法があればお教え下さい。お願いします。

  • Accessもしくはファイルメーカー詳しい方

    csv形式で100万件程のデータがあり、ファイルメーカーにインポートしたところ全てを一度にインポートすることが出来ません。何か良い方法はないですか? Accessで開いて見ることはできます。 Accessで10000件ずつくらいをコピーしてエクセルに 貼り付けして、ファイルメーカーにインポートしていってるんですが・・・作業が大変です。 何とかする方法ありませんか?どうしても作業をファイルメーカーでやりたいので教えてください。 Accessで●レコードから●レコードというようにレコードを指定してcsvでエクスポート等は出来ますか?

  • エクセルの配列関数の制限について

    エクセルの配列関数の制限について V列にX列・Y列・Z列・AA列・AB列・AC列・AE列・AG列・P列を参照した配列関数を 下のように入力しています。 {=SUM((Y$1:Y$500=F7)*(Z$1:Z$500=H7)*(AA$1:AA$500)*(P7="○"),(AB$1:AB$500=F7) *(AC$1:AC$500=H7)*(AE$1:AE$500=H7)*(AG$1:AG$500)*(P7="×"))} このY列・Z列・AA列・AB列・AC列・AE列・AG列は、ぞれぞれ200行くらいしか 文字が入力されていない場合には、配列関数の結果がうまく表示されました。 これらのセルの200行以降から300行・400行と項目を増やしていったところ、 配列関数の結果がうまく表示されないセルが出てきました。 これは、配列関数の参照するセルに制限があるということでしょうか?

  • MySQLデータベースにcsvファイルインポートで、エラー

    csvファイルインポートで、エラー phpMyAdminからMySQLデータベースに、csvファイルのインポートを試みたところ、 「CSV 入力のフィールド数が不正です(行: 17)」と表示され、うまくいきません。 データベースの中を確認すると、60レコードのうち、15レコードまでは正常にインポートされています。 元のcsvファイルを確認しても、mysql側とフィールド数は一致しており、問題はないように見受けられました。 phpMyadminのバージョンが、2.6.1-pl3から 2.10.0.2に変わった後、上記の問題が発生するようになりました。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • エクセルで同じ作業の簡略化したい・・・

    教えて下さい。 仕事で以下の処理を毎日行っていて、同じ作業なので、なんとか簡略化したいのですが、教えて下さい。 【作業】 テスト(1).xls テスト(2).xls 二つのファイルが有ります。 (2).xlsファイルの中のA列のデータを → (1).xlsのB列へコピー (2).xlsファイルの中のC列のデータを → (1).xlsのE列へコピー (2).xlsファイルの中のZ列のデータを → (1).xlsのAA列へコピー と、10列のコピーを一揆に出来ますでしょうか? 貼り付け先を間違えたりすると、大変な事になる等、同じ作業を繰り返すので、ぜひともPCの特性を生かしたいのですが・・・。 どなたか良い方法をご存知の方御座いましたら、ご教授頂けないでしょうか? 宜しくお願い致します。 質問が難しく、不明点等御座いましたら、お申し付け下さい。

  • 説明:エクセル関数で条件が二つの時の数値抽出

    質問ではないですが、No8332355 の回答の説明です。 下記の式 =SUMPRODUCT(($AA$75:$AA$152=X75)*($AB$75:$AB$152=Y75),$AC$75:$AC$152) の説明です。 まず、SUMPRODUCT の第1引数ですが、 ($AA$75:$AA$152=X75) は”配列数式”と呼ばれていて、{$AA$75=X75,$AA$76=X75,$AA$77=X75,・・・,$AA$152=X75} という配列データを返します。 1つづつの式は比較論理式ですから、値が一致すれば1、しなければ0となります。 (例えば、3行目で一致するとすれば、{0,0,1,0,0・・・,0}となります。) 同様に ($AB$75:$AB$152=Y75) は {$AB$75=Y75,$AB$76=Y75,$AB$77=Y75,・・・,$AB$152=Y75} となります。 この配列数式を掛け算すると、個々の対応する配列位置のデータが掛け合わされた配列データができます。つまり、X75とY75の値がAA列、AB列で一致した行のみ1となり、他は0になります。 SUMPRODUCT は、この配列と、AC列のデータを個々に掛け合わせて足し合わせるので、結果として検索列が一致した行のAC列のデータが取り出せる、というわけです。 配列数式については、ググってみれば、いろいろ解説が書かれたページがヒットしますので、そちらをご覧になって下さい。 伝わりましたかね?

  • エクセルでCSVファイルの取り込み

    エクセルでCSVファイルを取り込みます。 このCSVは毎日取り込んでいて、一回のファイルが大体50件くらいです。(1レコードあたり20項目あります) 今現在10000件くらいたまっています。 いつも外部データの取り込み(テキストファイル)で取り込むのですが、表の一番下にもって行き、取り込んだ後、 1、名前の管理で参照範囲の再設定 2、今取り込んだCSVの名前の削除 をしなくてはなりません。 もっと簡単に表に取り込めないでしょうか? 特に1は時々変な範囲になるので、厄介に思っています。 いい知恵がありましたら、教えてください。 よろしくお願いいたします。

  • Excelでcsvファイルをエクスポートしても、""を残しておきたい

    csvファイルをインポートしてExcelで編集し、また、csvファイルとして書き出すと、元のcsvファイルにはあった文字列の引用符「""」が消えてしまいます。 また、csvファイルを「テキストインポートウィザード」や「外部データの取り込み」を使って文字列の引用符を「なし」でインポートするとExcel上では問題ないのですが、csvで書き出すと「""""""」と引用符が2組増えています。 ご存知の方、元のcsvファイルとまったく同じ引用符でエクスポートする方法を教えてくださいm(_)m

  • ACCESS2000での大量データ処理

    CSVファイルの情報をACCESS2000にインポートして集計処理をしたいと考えてます。 CSVファイルの構成は、20フィールド(全て文字属性)で1レコード、1400レコードで1件となっております。(この仕様を変更する事は出来ないのが条件です。) 言い直せば、1名分の情報は1400レコードあるとなります。但し、集計に使用する情報はその内の400レコードであり、1000レコードは不要です。 処理する人数は3万件ぐらいあります。 (1)1400レコード×3万件の情報をインポート出来るのでしょうか?    テーブル制限の1Gを超えないのでしょうか(テーブルサイズの参照方法も?) (2)CSVをインポートする際に、必要なフィールド400だけインポートできるVBAはあるのでしょうか?  必要不要の判別フィールドはあります。 (3)インポート後、ACCESSで400項目を1レコードにする事はできないか?255以上のフィールドのテールを処理する方法はあるのでしょうか? (4)このような大量集計を可能にするには、みなさんは何を使用しているのでしょうか? よろしくお願いいたします。

  • エクセルの関数の質問です

    エクセルの関数の質問です 下記のIF文ですがIF条件式が6件までしか設定できません。(それ以上は数式エラーです) エクセル自体に条件があるみたいですが、代用する計算式または回避する方法がございましたら ご教授願えるとありがたいです。 =IF(C9=$AA$59,$AB$59, IF(C9=$AA$60,$AB$60, IF(C9=$AA$61,$AB$61, IF(C9=$AA$62,$AB$62, IF(C9=$AA$63,$AB$63, IF(C9=$AA$64,$AB$64, IF(C9=$AA$65,$AB$65, IF(C9=$AA$66,$AB$66, ""))))))))

専門家に質問してみよう