勉強しながら、エクセルVBAを組んでみたのですが
うまくいきません。
テキストデータを以下のようなプログラムで読んだのですが
(100行のデータを縦に並ぶように100個のセルの書き出す)
読み込みデータに「↓」で改行されているところでは
「↓」の間は同一行と見なされてしまうのですが
どのようにしたら一行で一つのデータと見てくれるのでしょうか?
分かる方がいましたら教えて下さい。
よろしくお願いします。
Sub pon()
'*** 変数の宣言 ***
Dim filenum As String
Dim i As Integer
Dim num As Integer, ms As String, cnt As Integer
Dim BookName As String, PathName As String
Dim ca As String
cnt = 1
i = 1
ca = Cells(1, 56)
PathName = "C:\"
textpath = Dir(PathName & "pon" & ca & ".txt")
BookName = Dir(PathName & "pon" & ca & ".txt")
Open PathName & BookName For Input As #1 'ファイルを開きます
Do While Not EOF(1)
Line Input #1, ms
cnt = cnt + 1
Cells(1, 57) = BookName 'データの書き出し
Cells(cnt, 56) = ms 'データの書き出し
Loop
Close #1
End Sub
No.4ベストアンサー
- 回答日時:
FileSystemObjectを使って入力すれば、改行コードに悩まされることなく同じようにプログラムできます。
Public Sub pon()
Dim objFs, file, filename, BookName
Dim cnt
Dim ca, ms
Set objFs = CreateObject("Scripting.FileSystemObject")
ca = Cells(1, 56)
filename = "C:\pon" & ca &".txt"
BookName = dir(filename)
Set file = objFs.OpenTextFile(filename, 1) 'read Only
Cells(1, 57) = BookName 'データの書き出し
cnt = 1
Do Until file.AtEndOfStream
ms = file.ReadLine
cnt = cnt + 1
Cells(cnt, 56) = ms 'データの書き出し
Loop
file.Close
End Sub
No.3
- 回答日時:
#1です。
補足頂いてありがとうございます。半分判りましたが、私が知りたいのは、メモ帳に読みこませた時どういう風に見えるかと言うことです。
1 3656 247
2 14175 1257
3 なし↓
の
(A)247のあと1257のあとは↓なのか、改行+復帰
なのか
(B)なし↓のあとは改行+復帰があるのか
(B)は多分・・・なし↓なし↓16655 4135・・・
なのでしょうが。
(A)によって使う入出力ステートメントが違い、その後の
ロジックが大幅に変わります。と言っても数行のことですが。
No.2
- 回答日時:
こんにちは。
maruru01です。No.1の方の補足とちょっと訂正を交えて。
「↓」はNo.1の方の指摘の通り、文字コード10のラインフィード(VBではvbLf)です。
通常改行に使用されるのは、このラインフィードの他に、文字コード13(12ではない)のキャリッジリターン(VBではvbCr)があります。
通常のWindowsの改行は、
キャリッジリターン+ラインフィード
の2文字で1つです。(VBではvbCrLf、文字コード13→10の順)
また、Macでは、キャリッジリターンのみが改行として扱われます。
この、vbCrLf(13+10)とvbCr(13)が、Openステートメントでは改行として判断されます。
vbLf(10)だけでは改行とは判断されません。
(ちなみに、Excelでは文字コード10はセル内改行として使用されています。)
方法としては、Line Inputで読み込んだデータを、vbCrのみで連結して、1つのデータにしておきます。
Dim alldata As String
・・・・・
Do While Not EOF(1)
Line Input #1, ms
alldata = alldata & ms & vbCr
Loop
という風に。
そして、最後まで読み込みが終わったら、全データで、
vbLf → vbCr
に置換してやります。
alldata = Replace(alldata, vbLf, vbCf)
これを、Split関数でvbCrで分割してやればいいでしょう。
Dim myArray As Variant
・・・・・
myArray = Split(alldata, vbCr)
For i = 1 To UBound(myArray)
Cells(i + 1, 56).Value = myArray(i)
Next i
No.1
- 回答日時:
この質問文の中で、↓文字コードとしては10、文字ではCHR(10)改行コードがテキストファイルに入っているはずです。
エクセルへデータをセットした時に下行に移るのは,
改行復帰CHR(10)+CHR(12)(VBではvbcrlf)が現れたときです。
従ってCHR(10)だけでは、下の行に移らないのは当然です。
だからテキストデータを変えられないのなら、プログラムでINSTR関数でCHR(10)を探し、そのタイミングで、Cells(i、j)を使う場合なら、i=i+1することになります。
実例でテキストデータの様子を実例で挙げてもらわないと
上記のヒントでやり方が判ればよいですが、サンプルプログラムが組めません。知りたいのは区切り文字の様子とか↓のあり様です。
この回答への補足
回答ありがとうございました。
言葉足らずですみませんでした。
実例データは以下の通りです。
1 3656 247
2 14175 1257
3 なし↓
4 なし↓
5 16655 4135
6 なし↓
7 なし↓
8 なし↓
9 14662 1936
10 85977 32589
ちなみに「なし」が表れるのは不規則です。
「なし」以外は通常の改行です。
marumaru01さんのではまだうまくいかないようで。。。
(ちょっと自分でも考えてみますが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
短歌が1行で収まらない場合、...
-
履歴書の志望動機の所で、「ま...
-
Chr(13)とChr(10)の違いは?
-
棒グラフ 横軸の縦書き2列にし...
-
excelで勝手に改行されます
-
Wordで原稿用紙設定の時に、ペ...
-
Tera Term のマクロでの改行コ...
-
VBA フォームのテキストボック...
-
HP内にある応募フォームで文章...
-
掲示板などでの句読点、改行の...
-
Excelのセルのハイフン
-
CiscoのConfigについて
-
Word 途中で勝手に改行してしま...
-
パワーポイントのテキストボックス
-
wordで均等割り付けをするとき...
-
Access2003で特定列の改行コー...
-
Accessにインポートしようとす...
-
バッチで指定ファイルの文末に...
-
せりふが長いときのかぎかっこ...
-
Excelセル内の改行を含む文字列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
wordの何も書かれていない2ペー...
-
Chr(13)とChr(10)の違いは?
-
履歴書の志望動機の所で、「ま...
-
【エクセル】セル最後にある無...
-
PDFの改行URLを有効にす...
-
wordで均等割り付けをするとき...
-
excelで勝手に改行されます
-
棒グラフ 横軸の縦書き2列にし...
-
パワーポイントのテキストボックス
-
短歌が1行で収まらない場合、...
-
Accessにインポートしようとす...
-
イミディエイトウインドウの最...
-
Tera Term のマクロでの改行コ...
-
VBA フォームのテキストボック...
-
EXCEL(VBA) 末尾の改行のみ削...
-
バッチで指定ファイルの文末に...
-
Excel セル内の最初と最後の改...
-
Word 途中で勝手に改行してしま...
-
エクセルでセル内改行の複数行...
-
EXCELで"-"で勝手に自動改行し...
おすすめ情報