ExcelのデータでA列(日付データ)、C列(名前)、E列(電話番号)とある会員の電話番号を管理しているデータがあります。毎回このデータをテキストファイルに値貼付けしているのですが、マクロで作成できないでしょうか?
このデータは毎回会員数が違うので、データが入力されている行までを選択してテキストファイルへ値貼付けできればありがたいです。よろしくお願いします。

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

A 回答 (3件)

#2のものです。

CSVファイルを作るとして述べます。
シートにコマンドボタンを1つ貼りつける。
そのコマンドボタンをダブルクリックして出てくる
コマンドボタンのClickイベントプロシージュアに下記を貼りつける。
デザインモードを脱して、
保存したいシートのセルの範囲を範囲指定して、ボタンをクリック。
Private Sub CommandButton1_Click()
Open "c:\my documents\aabb1.csv" For Output As #1
t = Selection.Row
b = Selection.Rows.Count
For i = t To t + b - 1
a = Cells(i, "A")
c = Cells(i, "C")
e = Cells(i, "E")
Write #1, a, c, e
Next i
Close #1
End Sub
sss",444,"京都"
"ddd",555,"名古屋"
"ddd",666,"浜松"
と言うようなファイルが出来ました。
「シートのセルの範囲を範囲指定させて」保存実感を持たせていますが、それをさせないで、最下行まで保存するなら
(略)
b = Range("a1").CurrentRegion.Rows.Count
For i = 1 To b
(略)
のようにしてください。
    • good
    • 0

下記のどれがご希望ですか。


(1)エクセルの1シートデータの「全部を」1本のテキストファイルに保存。
(2)エクセルの1シートデータの「一部を」、1本のテキストファイルに保存。本日分のみなど。
(3)今あるテキストファイルの中間行または最後行以後に、エクセルの1シートデータを全部または一部を挿入。
前日までのテキストファイルに追加。
(4)メモ帳のようなエディタに既存テキスト文書を開いて、任意の行に挿入。
「値貼りつけ」と言う表現からすると(4)のようにも取れるがどれでしょう。
(1)から(4)にしたがって、プログラムが難しくなりそう。#1のご回答は(1)のようですが。

この回答への補足

回答ありがとうございます。
(2)が希望です。会員データがありその中のA列,C列,E列のデータを貼り付けたいのです。ただ日によって会員数(行)が違います。データが入っている分だけテキストファイルに貼りつけたいのです。

補足日時:2003/09/09 13:50
    • good
    • 0

こんにちは



手続き的な部分をかなり端折っていますが・・・

Sub TXT_Create()
Open "Dirve名:Path名\File名" For Output As #1
Do
i = i + 1
日付データ = Sheets("シート名").Range("A" & i)
名前 = Sheets("シート名").Range("C" & i)
電話番号 = Sheets("シート名").Range("E" & i)
If 日付データ = "" Then Exit Do
Print #1, 日付データ, 名前, 電話番号
Loop
Close #1
End Sub

でいかがでしょう?
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QVBAでメモ帳にコピペをしたいのですが…

おせわになります。
excelで、たとえば、A1~A3のセルをコピーして、メモ帳に貼り付けるというVBAを作りたいのですが、うまくいかないので、教えていただけないでしょうか。
Range("A1:A3").Select
Selection.Copy
a& = Shell("notepad.exe", vbNormalFocus)
AppActivate ("無題 - メモ帳")
…ここまでは書けてるんですが…が…

Aベストアンサー

こんばんは。

本格的には、APIで書くところでしょうけれども、簡単な方法では、以下のようなものがあります。おそらく、#1 さんのご指摘のように、私も環境によってかなり違ったような記憶があります。Excelから、クリップボードに入ったものが、外に排出しないという問題だったか、前面に来ないのだっか、何かあったように思います。(APIでは可能ですが、これらをまともに書くと、ものすごいコードになってしまいます)

以下は、XP でしか試していません。

Sub TestSendText()
  Dim ret As Long
  ActiveSheet.Range("A1:A3").Copy
  ret = Shell("Notepad.Exe", vbNormalFocus)
  AppActivate ("無題 - メモ帳")
  CreateObject("Wscript.Shell").SendKeys "^v"
End Sub

なお、リテラル値以外に「a&」という書き方は、あまりVBAではしません。間違いではありませんが。

こんばんは。

本格的には、APIで書くところでしょうけれども、簡単な方法では、以下のようなものがあります。おそらく、#1 さんのご指摘のように、私も環境によってかなり違ったような記憶があります。Excelから、クリップボードに入ったものが、外に排出しないという問題だったか、前面に来ないのだっか、何かあったように思います。(APIでは可能ですが、これらをまともに書くと、ものすごいコードになってしまいます)

以下は、XP でしか試していません。

Sub TestSendText()
  Dim ret As Long
 ...続きを読む

Qテキストファイルのデータをエクセルへコピーのやり方

よろしくお願いします。
エクセル2000を使っています。

テキストのデータで
A1/B1/C1    /はスペースです。
D1/E1/F1    データの長さは全部違います。
A2/B2/C2    
D2/E2/F2
A3/B3/C3    
D3/E3/F3  
   ・
   ・(続く)
といったものがあります。これをエクセルで

   A列 B列 C列 D列 E列
1行 A1 B1 C1 D1 E1
2行 A2 B2 C2 D2 E2  ・・・
3行 A3 B3 C3 D3 E3  (続く)
         ・
         ・(続く)

という感じで別々のセルにいれて貼り付けしたいのです。

テキストデータを別々のセルに貼り付けする方法は
過去ログで「区切り位置」というのをつかえばいいというのはわかりましたが、この場合の複数行にわたるテキストデータをエクセルの1行に貼り付けする方法がわかりません。また、データの長さが違うために「区切り位置」もうまくいきません。
良い解決法をお願いします。

よろしくお願いします。
エクセル2000を使っています。

テキストのデータで
A1/B1/C1    /はスペースです。
D1/E1/F1    データの長さは全部違います。
A2/B2/C2    
D2/E2/F2
A3/B3/C3    
D3/E3/F3  
   ・
   ・(続く)
といったものがあります。これをエクセルで

   A列 B列 C列 D列 E列
1行 A1 B1 C1 D1 E1
2行 A2 B2 C2 D2 E2  ・・・
3行 A3 B3 ...続きを読む

Aベストアンサー

データ並びが一定でなくても構わないようにしています。
テキスト何行を1行分にして読込むか、設定出来ます。(今は2行に設定)

マクロを実行するとファイル名指定のダイアログがでますので、テキストファイルを
指定すると、アクティブシートにデータが読み込まれます。

宜しかったら詳しい手順を書きますのでテストしてみてください。

1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。
6.実行するときは、Alt + F8 (メニューから[ツール]-->[マクロ]-->[マクロ])で
 「テキスト複数行を1行で読込」を指定し、[実行]ボタンを押します。

Sub テキスト複数行を1行で読込()
Dim FNum As Integer, R As Integer
Dim Col As Integer
Const RwSet As Integer = 2 '<-- 読取り行数単位指定
Dim N As Integer, Rw As Long
Dim FileName, InData, Ary
FileName = Application _
.GetOpenFilename("テキスト ファイル(*.csv;*.txt),*.csv;*.txt")
If FileName = False Then Exit Sub
FNum = FreeFile
Open FileName For Input As FNum
Col = 1: Rw = 1
Do Until EOF(FNum)
  For R = 1 To RwSet
    If EOF(FNum) Then Exit Do
    Line Input #FNum, InData
    Ary = Split(Trim(InData), " ")
    For N = 0 To UBound(Ary)
      Cells(Rw, Col).Value = Ary(N)
      Col = Col + 1
    Next N
  Next R
  Rw = Rw + 1
  Col = 1
Loop
Close #FNum
End Sub

データ並びが一定でなくても構わないようにしています。
テキスト何行を1行分にして読込むか、設定出来ます。(今は2行に設定)

マクロを実行するとファイル名指定のダイアログがでますので、テキストファイルを
指定すると、アクティブシートにデータが読み込まれます。

宜しかったら詳しい手順を書きますのでテストしてみてください。

1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記...続きを読む

Qエクセルデータをメモ帳へ貼り付け

仕事で使うためのマクロを作成しているところです。

1.エクセルで作成したデータ(A列に何百行も入っています。1行目から最終行まで空白セルはありません)を上から20行コピー
2.メモ帳を起動して貼り付け
3.Cドライブの直下に『1.txt』として保存し、メモ帳を閉じる
4.1.でコピーした次の行から20行コピー
5.メモ帳を起動して貼り付け
6.Cドライブの直下に『2.txt』として保存

・・・と言うように繰り返していきたいのですがどうしたらいいのかわかりません。
色々調べると一つ一つの工程のマクロは見つけられるのですが、
理屈がわからない状態なので「こんな感じかな?」とそれぞれをつなげてもさっぱり動いてくれません。
どなたか上記の一連のマクロのやり方を教えては頂けないでしょうか?
また、できましたらどういう理由からそうなるのかも教えていただきたいと思います。
(仕事上、期限があるのでそう時間はないのですが、
勉強のためにその理屈から自力で作成したものと頂いた回答の答え合わせができたらなぁ。と考えております。)
わがままな要望で大変申し訳ありませんが、よろしくお願いします。

仕事で使うためのマクロを作成しているところです。

1.エクセルで作成したデータ(A列に何百行も入っています。1行目から最終行まで空白セルはありません)を上から20行コピー
2.メモ帳を起動して貼り付け
3.Cドライブの直下に『1.txt』として保存し、メモ帳を閉じる
4.1.でコピーした次の行から20行コピー
5.メモ帳を起動して貼り付け
6.Cドライブの直下に『2.txt』として保存

・・・と言うように繰り返していきたいのですがどうしたらいいのかわかりません。
色々調べると一つ一つの...続きを読む

Aベストアンサー

Sub Macro5()
Dim sht As Worksheet
Dim cnt, idx As Long
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  Set sht = ActiveSheet
  On Error GoTo end0
  For idx = 1 To sht.Range("A65536").End(xlUp).Row Step 20
    cnt = cnt + 1
    ActiveSheet.Cells(idx, "A").Resize(20, 1).Copy
    Workbooks.Add
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:="Z:\" & cnt & ".txt", _
      FileFormat:=xlText, CreateBackup:=False
    ActiveWorkbook.Close
  Next idx
end0:
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub

自作のマクロを掲載するならともかく、それをしないで注文ばかりされるのはいかがなものかと…

Sub Macro5()
Dim sht As Worksheet
Dim cnt, idx As Long
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  Set sht = ActiveSheet
  On Error GoTo end0
  For idx = 1 To sht.Range("A65536").End(xlUp).Row Step 20
    cnt = cnt + 1
    ActiveSheet.Cells(idx, "A").Resize(20, 1).Copy
    Workbooks.Add
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:="Z:\" & cnt & ".txt", _
      FileFormat:=xlText, C...続きを読む

Qメモ帳(テキストデータ)をExcelにセルに分けて貼り付ける方法は?

例えば、以下のようなメモ帳(.txt)のデータをExcelに貼り付ける際に、スペースが空いているもの単位で、セル別に貼り付ける方法はございますでしょうか?

(データ例)
100 150 130
200 200 230

このデータについては、100→A1、150→B1などセル毎に貼り付けたいと考えております。

A1 B1 C1
A2 B2 C2

Aベストアンサー

Excelのシートを開いた状態で、
データ→外部データの取り込みでファイル名(Txtファイル)を指定し、
スペースによって右・・の欄にチェックを入れ、読み込めば出来ます。

Qマクロでメモ帳に貼り付け

A.xlsのSheetBをメモ帳に貼り付けて名称をC2009.4.6.txt
にしたいと考えています。
SheetBのコピーをしメモ帳を起動後、メモ帳に貼り付けるところまではsendkey等で強引にやったのですが、「名前を付けて保存する」を手動で行わなければならないので
少々面倒くさく感じています。
作成したtxtファイルをD:E\に自動で保存させる方法はないでしょうか?
出来れば名称はデータ2009.4.6.txtの様に保存した日付が入ると助かります。また、同じ名称のものが既にあった場合はファイルネームに(2)が入るようにしたいと考えております。

どうかお知恵を拝借ください。
よろしくお願いします。

Aベストアンサー

#3についてですが、
参照設定されていないのでしょう。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040_04.html
'Microsoft Forms 2.0 Object Libraryを見つけてチェックを入れて下さい。

QVBA 開いているシート上にテキストファイルを開く

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。

 環境:Win7+Excel2007
でございます。

 今開いております「Book1」上に「シート1」「シート2」があるといたしまして、
「シート2」上に、「C:\ファイル1.txt」(←1000行程ございます)を
「1行ずつ読み込むのではなく、Workbooks.OpenTextのように一度に開く」事は可能でございますでしょうか??

 行数が多いのでReadLineをいたしますよりは、何か「開いているエクセルファイル上にテキストファイルをドラッグして開いた時のような方法」はないかな、と検索いたしておりまして、
OpenTextを見つけて試しましたが、新規エクセルファイル上で開いてしまいます。。。

 もし何かよさそうな方法がございましたら、是非ともアドバイスいただきたく
どうぞよろしくお願いいたします。

Aベストアンサー

一般的なテキストファイルを前提に。

たとえば:
sub macro1()
 dim FSO as object
 dim buf as string
 dim a as variant
 set fso = createobject("Scripting.FileSystemObject")

 with fso.getfile("C:\test\test.txt").openastextstream
  buf = .readall
  a = split(buf, vbcrlf) ’実際の改行コードに気を付ける
  worksheets("Sheet2").range("A1").resize(ubound(a) + 1, 1) = application.transpose(a)
  .close
 end with
 set fso = nothing
end sub



#OpenTextで開いた後に、たとえばシートごとブックに取り込むとか、ふつーにコピー貼り付ける等の方が遥かに簡単と思いますが。まぁお好みの方法で。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcel VBA 値の貼り付けとUnicode テキスト貼り付け

クリップボードの内容(数値もしくは文字列)を貼り付ける際、
アクティブなセルに値もしくはUnicodeテキストとして
貼り付けるコードを書こうとしています。
コピー&ペーストする内容は1つのセルだったり、複数のセル範囲だったり、
はたまたExcel以外のアプリケーションからのコピーだったりします。

それぞれについては下記のように書けば希望通りになるのですが
どちらであっても対応できるよう、
両方の機能を一つのプロシージャでまとめることは可能でしょうか?

■エクセルシート上の値(セルや範囲)からの貼り付け
Selection.PasteSpecial Paste:=xlValues

■外部ファイル(HTMLなど)からのUnicodeテキスト貼り付け
ActiveSheet.PasteSpecial Format:="Unicode テキスト"

これらは「マクロの記録」を参考にしたものですが、
Rangeオブジェクト用とWorksheetオブジェクト用に分かれているので
クリップボードの種別判定?やエラー判定?のようなif文等による
何らかの分岐が必要なのかなと思い、自分なりに調べてみましたが、
具体的な方法がわからず困っております。

どちらにも対応できるコードにするにはどうすれば良いでしょうか?
どうぞよろしくお願いいたします。

クリップボードの内容(数値もしくは文字列)を貼り付ける際、
アクティブなセルに値もしくはUnicodeテキストとして
貼り付けるコードを書こうとしています。
コピー&ペーストする内容は1つのセルだったり、複数のセル範囲だったり、
はたまたExcel以外のアプリケーションからのコピーだったりします。

それぞれについては下記のように書けば希望通りになるのですが
どちらであっても対応できるよう、
両方の機能を一つのプロシージャでまとめることは可能でしょうか?

■エクセルシート上の値(セル...続きを読む

Aベストアンサー

ついでに Application.ClipboardFormats を使った簡易サンプル。
なお、HTMLソースのコピーの場合は、テキスト貼り付けになりません。
対策するなら、#2 のようにクリップボードから直接テキストを
取り出して自前処理する必要があります。

Public Sub Sample2()

  If IsCBFormatAvailable(xlClipboardFormatLink) Then
    Selection.PasteSpecial Paste:=xlPasteValues
  ElseIf IsCBFormatAvailable(xlClipboardFormatText) Then
    ActiveSheet.PasteSpecial Format:="Unicode テキスト"
  Else
    ' その他...Excel でも Shape とか Graph がありますよね
    ActiveSheet.Paste
  End If

End Sub

' // 指定したフォーマットのデータがクリップボードにあるか?
'
Public Function IsCBFormatAvailable(ByVal wFormat As XlClipboardFormat) As Boolean
  
  Dim fmt As Variant
  For Each fmt In Application.ClipboardFormats
    If CLng(fmt) = wFormat Then
      IsCBFormatAvailable = True
      Exit For
    End If
  Next

End Function

ついでに Application.ClipboardFormats を使った簡易サンプル。
なお、HTMLソースのコピーの場合は、テキスト貼り付けになりません。
対策するなら、#2 のようにクリップボードから直接テキストを
取り出して自前処理する必要があります。

Public Sub Sample2()

  If IsCBFormatAvailable(xlClipboardFormatLink) Then
    Selection.PasteSpecial Paste:=xlPasteValues
  ElseIf IsCBFormatAvailable(xlClipboardFormatText) Then
    ActiveSheet.PasteSpecial Format:="Unicode テ...続きを読む

Q既存のテキストファイルを開く方法

エクセルvbaで
テキストファイルに書き込むのではなく
既存のテキストファイルを開く方法を教えてください。

ご教授よろしくお願い致します。

Aベストアンサー

開くだけで後は何もしなくて良いのでしょうか?
CreateObject("Shell.Application").ShellExecute "ファイルのフルパス"
拡張子によって関連付けられたアプリケーションで開かれます。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報