Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
メモ帳へ貼り付ける!
投稿日時: 18/07/19 21:36:15
投稿者: clovyer

エクセルデータA列だけをメモ帳へ貼り付けるのを自動化したいんですが、センドキーを使わない方法が知りたいです。

回答
投稿日時: 18/07/19 21:55:45
投稿者: WinArrow
投稿者のウェブサイトに移動

>A列
を、ってことは、複数セルですよね?
複写先のメモ帳は、プログラム名ですから、
ファイル名はどのようになっているんですか?
 
ファイルがあるのでしたら、どのように開いているんですか?
ファイルがないのでしたら、メモ帳をどのように起動しているんですか?
 
テキストファイルを作成する方法では駄目ですか?
 
 
 

投稿日時: 18/07/19 22:06:06
投稿者: clovyer

この後、A列を貼り付けをしたいんですが…
ファイルの作成から違うのですか?
 
Dim filename As String
 
filname=Activeworkbook.Path & "\test.txt"
 
Open filename For output As #1

回答
投稿日時: 18/07/19 22:23:01
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示のコードは、テキストファイルを作成する
時のテキストファイルをoutputモード(書き込み)で開いているコードです。
 
貼付けするのではなく
 
Print #1,Range("A" & 行番号),Value
で書き出すことができます。
 
最後に
Close #1
で閉じればファイルとして作成できます。

投稿日時: 18/07/19 22:30:52
投稿者: clovyer

それがRangeのところをColumns("A")に変えたら、上手くいかないんです…

回答
投稿日時: 18/07/20 07:22:06
投稿者: WinArrow
投稿者のウェブサイトに移動

clovyer さんの引用:
それがRangeのところをColumns("A")に変えたら、上手くいかないんです…

 
それは、無茶ですよ
 
サンプルコード1:セルを一つづつ書き出す。
Dim RowIx As Long
 
    For RowIx = 1 To Range("A" & Rows.Count).End(xlUp).Row
        Print #1, Range("A" & RowIx).Value
    Next
 
 
サンプルコード2: データが入っているセル全部を一挙に書き出す
 
Dim data, Fno As Integer, Fname As String
    With Sheets(1)
        data = .Range("A1").CurrentRegion.Columns("A")
        data = WorksheetFunction.Transpose(data)
    End With
    Fname = Activeworkbook.Path & "\test.txt"
    Fno = FreeFile
    Open Fname For Output As #Fno
    Print #Fno, Join(data, vbCrLf)
    Close (Fno)
 
 
 
 

回答
投稿日時: 18/07/20 07:47:40
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
テキストファイル操作時の「ファイル番号」は
「#1」のような記述より、変数を用意して使う方法をお勧めします。→ Fno のような変数を使う
理由
ファイル番号は、Closeするまで解放されないため、
実行中のトラブル発生で、Closeされない状況になった場合、
再実行時、OPen時、エラーになります。
 

投稿日時: 18/07/21 08:51:07
投稿者: clovyer

ありがとうございます。
 
サンプルコード1では、Open filename Output As #1にファイル名または番号が不正です。というエラーがでます。
サンプルコード2では、空白セル以降が書き出されません。
CurentReagionを外すとエラーがでてしまいます。
 
何度もすみません。

回答
投稿日時: 18/07/21 09:45:35
投稿者: WinArrow
投稿者のウェブサイトに移動

clovyer さんの引用:

サンプルコード1では、Open filename Output As #1にファイル名または番号が不正です。というエラーがでます。

 
この件は、「追加レス」で説明したとおりです。
  
Open〜〜〜文
の前に
Close #1
を記述して実行すれば、ファイル番号:1は解除されます。
 1回だけ実行したら、この行を削除してください。
  
clovyer さんの引用:

サンプルコード2では、空白セル以降が書き出されません。
CurentReagionを外すとエラーがでてしまいます。

 .CurrentRegion
は、手操作の
[Ctrl]+[Shift]+[*]
をコード化したものです。
 空白行or空白列が存在すると、その手前までが対象になります。
 空白行があることを、状況として説明するよう異願いします。
回答者は状況説明の範囲内で判断します。
そういう意味では、回答者は正解を回答することはありません。
あくまでもヒントを提供するスタンスです。
ヒントをもらったら、実情に合わせてカスタマイズすることは、
質問者のスキルアップに繋がります。
 
それには、コードの意味をキチンと理解することです。
>CurentReagionを外す
のようなことは、コードを理解したとは言えません。
  
〜〜〜以上は、はともかく〜〜〜
  
途中に空白のセルが存在する場合の
 セル範囲を認識する方法は、下から、空白セルをスキップデータが入っているセルを探す方法を紹介します。
  
MaxRow = Range("A" & Rows.Count).end(xlup).Row
   
で、MaxRowに、データの最終行が求められます。
  
次に。先頭セルぁら、最終セルまでの範囲を認識するには
Range(Cells(1,"A"),Cells(MaxRow,"A"))
というコードになります。
これらをヒントにコードを修正して見てください。
 
なお、空白セルは、テキストファイルでも空白行になるけど、問題ありますか?
 
>一挙に
とは、ループ処理をしないで・・・という意味です。
もし、テキストファイルの中に、
「空白行は含めない」という条件ならば、
サンプルコード1のループ処理の中で、空白セルを判断することになります。
 
 

投稿日時: 18/07/21 11:07:14
投稿者: clovyer

空白行も読み込んで欲しいんです!
 
確かに、ぜんぜん理解できていません…
何かオススメの本などがあれば教えていただきたいです。

回答
投稿日時: 18/07/21 11:32:02
投稿者: WinArrow
投稿者のウェブサイトに移動

clovyer さんの引用:

空白行も読み込んで欲しいんです!
 
確かに、ぜんぜん理解できていません…
何かオススメの本などがあれば教えていただきたいです。

 
VBAを理解するには、
いろんな本を読むのもひとつの方法でですが、
どれでも良いというわけには行かないと思います。
 
てっとり早い方法は、マクロの記録を使うことです。
「このような操作をすると、こんなコードになるんだ」
それで作成されたコードを1行ごとに理解することから始めたらいかがでしょう?
 
それから、ステップ実行をお勧めします。
コードを「PF8」を押しながら1ステップづつ実行し、
その時の変数の「値」を確認したり、流れを確認したりして、
ロジックの間違いを発見する手段です。
 
例えば
    For RowIx = 1 To Range("A" & Rows.Count).End(xlUp).Row 
        If Range("A" & RowsIx).Value <> "" Then
             Print #1, Range("A" & RowIx).Value 
        End If     
    Next

というコードがあったとして、
ROwIxは,変数ですから、その文字にカーソルを当てると「値」が表示されます。
 
ところで、
>空白行も読み込んで欲しいんです!
は、書き込んでのまちがいでは?
 

投稿日時: 18/07/21 12:23:54
投稿者: clovyer

確かに、書き込んで欲しいんです…
 
ご丁寧にありがとうございました。

回答
投稿日時: 18/07/21 14:05:32
投稿者: simple

横入り失礼します。
今のコードでも空白行は空白行として扱われています。
 
>何かオススメの本などがあれば教えていただきたいです。
この件に特別のことはないはずです。
(テキストファイルの読み書きは頻度は低いかもしれないが。)
 
普通に、ExcelVBAに関する図書を学習されることをお薦めします。
学習しなけば理解できないのは普通のことですから。何も難しい話はないです。
ExcelVBAは強力な武器になり得ますから、これを機会に学習されるようお薦めします。

投稿日時: 18/07/21 15:01:58
投稿者: clovyer

たくさんの書籍が販売されているので、具体的なものが欲しいのですが…

回答
投稿日時: 18/07/21 15:12:29
投稿者: simple

ご自分で手にとって、ご自分で判断することです。
 
自分にとって難易度はどうか、自分にとって説明が分かりやすそうか、
などご自分なりの判断があるはずです。
また、何かを自分の判断において決断することも大切です。
それが自分で責任を持つということなのです。
 
投資したからには、それをできるだけ回収するように努力する。
必ずしもベストな判断ではなくても、それはそれで次の投資の判断材料となります。
書籍の善し悪しは差は知れています。要は、読者がどれだけそれを利用しようとするかです。
頑張って下さい。

投稿日時: 18/07/21 19:06:23
投稿者: clovyer

はい、失礼致しました。

回答
投稿日時: 18/07/22 05:03:37
投稿者: もこな2

閉じてないので、横からですが思ったことを。
 
最初の質問で

clovyer さんの引用:
エクセルデータA列だけをメモ帳へ貼り付ける
と仰ってますけど、Appendではなく、
Open filename For output As #1
でいいなら、メモ帳に貼付けと難しく考えなくても、単純にテキストとして保存すればいいんじゃないでしょうか?
 
Sub Sample()
    Dim MyRNG As Range
    
    With ActiveSheet
        Set MyRNG = Intersect(.UsedRange, .Columns("A"))
    End With
    
    With Workbooks.Add
        MyRNG.Copy .Worksheets(1).Range("A1")
        
        Application.DisplayAlerts = False
        .SaveAs _
            Filename:=ThisWorkbook.Path & "\test.txt", _
            FileFormat:=xlUnicodeText
        .Close
        Application.DisplayAlerts = True
        
    End With
End Sub

回答
投稿日時: 18/07/22 11:13:53
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
単純にテキストとして保存すればいいんじゃないでしょうか

 
もこな2 さんへ
 
そだね!

投稿日時: 18/07/23 21:17:58
投稿者: clovyer

皆様、助けていただきありがとうございました。
保存という方法があるとは、驚きでした!
また、掲示板に投稿する事あると思いますので、その時までに少しでも成長できてるよう本を買って勉強してみます。
本当にありがとうございました。

投稿日時: 18/07/23 21:19:47
投稿者: clovyer

閉じるの忘れてました、