お世話になります。

( Windows 98 Second Edition : Access 2000 )

csvファイルをマクロを使ってインポートしたいのですが
アクション種類、方法がわかりません。
初心者なのですが教えてください。

決まったフォルダーにcsvファイルを入れ
あとはアクセスのメニュー画面で一括処理を行なう予定です。
(拡張子はcsvですがファイルの画像はエクセルの場合エクセルと考えたほうが
いいのでしょうか)

ファイル名はmeisai.csv user.csv head.csvの3種類です。

全て1行目はヘッダーとして使用しています。(ファイル名、ヘッダーの名称は
変わることはありません)

インポートのvbaは作れるのですがこれをマクロでどのように設定使用するかが
分かりません。

一連の作業の流れとして(これは注文データです)
・メールできた暗号化ファイルを解凍しフォルダーへいれる
・3つのファイルをインポートする
・クエリでheadとmeisaiとuserを組み合わせる
・注文票としてレポート印刷する
(開くたびにサイズがデフォルトに戻ってしまうのですが解消できますでしょ
うか)
・更新クエリーを使い履歴を残す
・削除クエリーを使い元のテーブルを空にする
終了
以上の作業をメニュー画面のボタン一つで出来ればと考えています。ご教授お
願いいたいます。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

まず、インポートする時にインポート定義を保存します。

(3つ分)

マクロではアクションを「テキスト変換」としてください。
変換の種類を「区切り記号付きインポート」
定義名を「保存した定義名を選んでください」
テーブル名「アクセス側のテーブルの名前」
ファイル名「元ファイルの場所と名前」
例)c:¥windws¥デスクトップ¥○○
フィールド名の設定「いいえ」

インポートのマクロの設定これで大丈夫だと思います。
いかがでしょうか。

印刷はマクロでレポートを開くでビューを印刷にして下さい。
更新・削除などのクエリーは、クエリーを開くでクエリー名を指定したら
大丈夫だと思います。
>・メールできた暗号化ファイルを解凍しフォルダーへいれる
これはちょっと分かりません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

Q【VAB】 エクセルファイルからCSVファイルをインポートするには

お世話になります
実行可能か、わからず質問させて頂きます。

■概要
・CSVファイルをエクセルファイルにインポートしたいです
■設置
・ユーザーフォームにテキストボックス、参照ボタン、実行ボタン
を生成
■動き
・参照ボタンをクリックするとダイアログボックスでCSVを選ぶ
・選んだあて先がテキストボックスに記載される
・実行ボタンでCSVをエクセルのシートに貼り付け
(このとき貼り付ける列はVB内で決めておきたい、1,4,5,6,9列を貼り付けるなど)

わかる方ご教授よろしくお願い申し上げます

Aベストアンサー

>今の状態で2行目から貼り付けを実行させたいのですが可能ですか?
データ貼り付けの部分の
ws.Cells(r + 1, c + 1) = d(Val(cols(c)) - 1)

ws.Cells(r + 2, c + 1) = d(Val(cols(c)) - 1)
に変更してください。

もしも「CSVファイルの2行目から貼り付け・・・」と言う意味なら
For r = 0 To UBound(csv)

For r = 1 To UBound(csv)
に、
ws.Cells(r + 1, c + 1) = d(Val(cols(c)) - 1)

ws.Cells(r, c + 1) = d(Val(cols(c)) - 1)
に変更してください。

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qエクセル csvファイルのインポート

エクセルブックのシートにcsvファイルの情報をインポートしたいのですが,普通にファイルを開くと別ブックで立ち上がってしまいます。
何か良い方法ありませんでしょうか?

よろしくお願いします。

Aベストアンサー

下記をVBE画面の標準モジュールに貼りつけ実行してください。(エクセル2000.Splitが使えるVersion)
(1)"c:\my documents\あああ.csv" -->指定のCSVファイル名(フルパス)に変えてください。
(2)Worksheets("sheet2").Activate--->指定シートに
変えてください。
Sub test01()
Open "c:\my documents\あああ.csv" For Input As #1
i = 1
Worksheets("sheet2").Activate
p01:
If EOF(1) Then GoTo p02
Line Input #1, a
s = Split(a, ",")
For j = 0 To UBound(s)
Cells(i, j + 1) = s(j)
Next j
i = i + 1
GoTo p01
p02:
Close #1
End Sub

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

QAccess又はExcelで256項目を超えるCSVファイルをインポートしたい

たとえば500項目(フィールド)あるCSVファイ
ルを取り込みたいのですが、AccessもExcelも
256項目までしかインポートできません。


500項目を200項目ごとに
 1回目   1~200項目まで
 2回目 201~400項目まで
 3回目 401~500項目まで
分けてでもいいのですが。


又直接でなくても
別途、エディッタを使うとかで加工後、Access
にインポートするでもOkなんです。

ただ、レコード件数が多いため1レコード毎に加工
するのは無理なんです。


何かよい方法はないでしょうか? 

Aベストアンサー

http://rd.vector.co.jp/soft/win95/business/se096074.html

http://www.koka-soft.com/okada/koka_software/chgfld.htm


これあたりで 事前に加工できそうですが・・・

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

Qカンマ区切りの数字をCSVファイルにインポートする時どうすれば?

カンマ区切りで区切られた金額を
CSVファイルにエクスポートなどする時は、
どうやって、カンマの区切りを判別するのですか?

Aベストアンサー

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例えば334,455のセルには値はカンマが省かれています。
(3)だいたい、数値を表示するソフトは、値はカンマなしで保持し、画面や印刷するときに、カンマを入れるものです。
(4)(2)において3桁ごとのカンマを入れるだけにすると、項目区切りのカンマと区別がつかなくなりますが、
それでそのために前後をダブルクオーテーションでくくる
約束です。
(5)むしろCSVファイルの基本は、1項目の前後をダブルクオーテーションで括るのが原則なのですが、数値の場合省略できると言う約束になっている形式が多いです。しかし3桁ごとのカンマを入れるとすると、原則に戻らざるを得ません。

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例え...続きを読む

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

QCSVファイルをエクセルへインポート

お世話になります
ユーザーホームにテキストボックス、参照ボタン、実行ボタンを配置。

参照ボタンをクリックするとダイアログボックスが開きCSVを選ぶ。
選んだ場所がテキストボックスに記載され実行ボタンを押すと
エクセルにインポートする。

張り付き内容は下記の通りです
XLS側は
CSV→XLS側
B列→XLSのC列へ
D列→XLSのG列へ
F列→XLSのI列へ
分かる方ご教授願います
当方初心者の為VBAコードでお願いします

Aベストアンサー

遅くなってごめんなさい。
↓↓↓でどうでしょう?

Dim csvName As String, myFileName As String, myData As String, myStr As String
Dim LastRow As Integer, i As Integer


'========================================
'選択したCSVファイルのパスをテキストボックスに表示
'========================================

myFileName = Application.GetOpenFilename _
("csvファイル(*.csv),*.csv", 1, "csvファイルを開く")

UserForm1.TextBox1 = myFileName


'========================================
'CSVファイルを開いて、データをコピー
'========================================

Workbooks.Open FileName:=myFileName
csvName = ActiveSheet.Name & ".csv"
Cells.Copy


'========================================
'捨てシートを作成し、ペースト
'========================================

Windows("Book1.xls").Activate
Sheets.Add
ActiveSheet.Paste
ActiveSheet.Name = "読み込み用"


'========================================
'CSVファイルを閉じる
'========================================

Application.DisplayAlerts = False
Windows(csvName).Close
Application.DisplayAlerts = True


'========================================
'配送者名をセルに入れる
'========================================

Sheets("データ").Activate
LastRow = Range("A65536").End(xlUp).Row

For i = 1 To LastRow
myData = Cells(i, 1)
Cells(i, 3).FormulaR1C1 = "=Index(読み込み用!R1C1:R" & LastRow & "C2,match(""" & myData & """,読み込み用!R1C1:R" & LastRow & "C1,0),2)"
myStr = Cells(i, 3).Text
Cells(i, 3) = myStr
Next


'========================================
'捨てシートを削除
'========================================

Application.DisplayAlerts = False
Sheets("読み込み用").Delete
Application.DisplayAlerts = True

遅くなってごめんなさい。
↓↓↓でどうでしょう?

Dim csvName As String, myFileName As String, myData As String, myStr As String
Dim LastRow As Integer, i As Integer


'========================================
'選択したCSVファイルのパスをテキストボックスに表示
'========================================

myFileName = Application.GetOpenFilename _
("csvファイル(*.csv),*.csv", 1, "csvファイルを開く")

UserForm1.TextBox1 = myFileNam...続きを読む


人気Q&Aランキング

おすすめ情報