こんにちわ。
私はWindowsXPのExcel2003のVBAでテキストファイル
のデータ(カンマ区切り)を指定したセル列に代入
したいと思っているのですが、途中でセル列を変えたら
データの続きから代入したいのですが上手くいきません。
この説明だと分かりづらいと思うので下記の例を見てください。
例)
テキストファイルの中身:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
:
・
90,91,92,93,94,95,96,97,98,99,100
セル列(B1:B10)に1~10の値を代入し、他のセル列(E1:E10)に11~20の値を,またその他のセルに30~のデータを10ずつ区切って代入したい考えています。下記のコードを実行したところ、
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = buf
Worksheets("sheet1").Range("B1:B10,E1:E10,H1:H10") = WorksheetFunction.Transpose(buf)
Loop
Close #intFF
最初のB列にはきちんと代入されるのですが、E列では全てのセルに1が、H列にはB列の値(1~10)が代入されてしまいます。どうしたら良いのかお教え願います。
No.4ベストアンサー
- 回答日時:
Line Inputで Tmpに読み込まれる文字列が
1,2,3 ... 98,99,100
といった途中に改行など無い文字列なのでしょうか
質問時に例示文字列ですと
『1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,』
『11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,』
と別行のように思えます ... 『11,12,13,14,15,』が重複しているため
1-100までのカンマ区切り文字列なら
読み込んだ行を splitで分解して
これを別の配列に 0-9,10-19, 20-29などをコピーして
WorksheetFunction.Transpseしてしまえばいいでしょう
dim arTemp, m as integer, n as integer, i as integer
' 読み込んだ文字列を分解
buf = split( tmp, ",")
' 転記用の配列を準備
redim arTemp(9)
m = 0
for n = 0 to 99 step 10
for i = 0 to 9
' 転記用の要素の代入
arTemp( i ) = buf(n+i)
next
Range("B1:B10").Offset(0,m).value = WorksheetFunction.Transpose( arTmp )
m = m + 3
next
といった具合でしょう
この回答への補足
おはようございます。
すみません!!改行はしていますけど重複はしていないです・・。
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,24,25,
26,27,28,29,30,31,32,33,34,35,
・
・
こうでした・・。
No.10
- 回答日時:
ANo.9です。
>指定した行のデータだけではなく全てのデータを読み込んでしまいます・・・。
まず、どのようなcsvファイルを、どのようにシートに分けていくのか
分ける前と後のシートレイアウトが不明です。
そして”指定”が意味する物が何であるか?と言う事です。
条件を与えるのか?データから書き込むシートを指定するのか?
紹介したサイトについては、csvの読み込み方を参考にと言う事であり、
そのものが要望事項の全てを網羅しているわけではありません。
必要に応じて書き換えなければなりません。
が、先にも申し上げたように要望事項が見えてこないのです。
あと質問事項が変わったのであれば、一度閉じて新たに立て直す方が、
回答の際にも切り分けしやすいと思いますよ。
No.9
- 回答日時:
n-junです。
>実行してみたら、確かに数字が繋がっていました。このテキストファイルの中身では無理なのでしょうか?
私のコードで無理な理由がわかりました。
しかし、対策としてはANo.4さんが既に回答されてますよ。
>あと、最初と趣旨が変わってしまうのですが・・・テキストファイルではなくcsvは読み込めますか?
>これをマクロを実行したら行単位で読み込んで、それぞれ別のシートの指定したセルに代入するのは可能でしょうか?
>それぞれの行の整数の数は違います。
CSV形式テキストデータの読み込み(カンマ数不定版)
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
ご参考に。
この回答への補足
指定したセル列に値を代入するのは出来ました!!
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
上のサイトを参考にしてやったのですが、指定した行のデータだけではなく全てのデータを読み込んでしまいます・・・。
No.8
- 回答日時:
またまたonlyromです。
>B14:B73にはきちんと入るのですが、EとHには何も数字が入りません
それはデータが全て繋がって読み込まれたからでしょう。
それを確認するために、以下の●の部分にMsgBoxをいれて実行してみてください。
Do Until EOF(intFF)
Line Input #intFF, tmp
MsgBox tmp '●ここで内容を表示して確認
buf = Split(tmp, ",")
それから、次のコードは不要だと思いますが。。
>'ファイルの存在チェック
>If Dir(strFILENAME) = "" Then
>MsgBox strInFileName & "が見つかりません"
>Exit Sub
>End If
この回答への補足
何度もご回答ありがとうございます。
実行してみたら、確かに数字が繋がっていました。このテキストファイルの中身では無理なのでしょうか?
あと、最初と趣旨が変わってしまうのですが・・・テキストファイルではなくcsvは読み込めますか?csvの中身は下記のようにしたいと考えています。
例)
A B C D..........
1 "氏名"
2 2 2 1 3....(整数の羅列)
3 1 3 2 3....(整数の羅列)
4 3 3 3 3....(整数の羅列)
5 2 1 2 3....(整数の羅列)
.
.
これをマクロを実行したら行単位で読み込んで、それぞれ別のシートの指定したセルに代入するのは可能でしょうか?それぞれの行の整数の数は違います。
(最初と質問の内容が全く変わってしまい、申し訳ございません。)
No.7
- 回答日時:
しつこく登場、onlyromです。
n-junさん、フォローありがとうございます。
まさか、勝手に型を変更されてるとは、思いもしませんでした。
質問者さん、ダメですよ~、勝手に変えちゃ。。(>_<);;;
余談ですが、
n-junさんの回答は目に付く限りにおいて必ず読ませてもらってます。
とても参考になります。
これからも目から鱗の回答を期待しています。
この回答への補足
おはようございます。
申し訳ないです!!かなりの初心者なので、変数宣言の際には何かつけなければいけないと思い、勝手につけたしてしまいました・・。
コードは下記の通りです。
例)
Dim buf As Variant, tmp As String
Dim xlAPP As Application ' Applicationオブジェクト
Dim intFF As Integer ' FreeFile値
Dim strFILENAME As String ' OPENするファイル名(フルパス)
Dim D As Long, i As Long, N As Long, O As Long, Co As Long
Dim Ag As Long, Si As Long, G As Long, W As Long, Fr As Long
Dim x As Integer, Cnt As Integer, Rng
' Applicationオブジェクト取得
Set xlAPP = Application
' 「ファイルを開く」のフォームでファイル名の指定を受ける
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _
Title:=cnsTITLE)
' キャンセルされた場合は以降の処理は行なわない
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(入力モード)
Open strFILENAME For Input As #intFF
'シートの保護を解除
ActiveSheet.Unprotect
'ファイルの存在チェック
If Dir(strFILENAME) = "" Then
MsgBox strInFileName & "が見つかりません"
Exit Sub
End If
Rng = Array("B14:B73", "E14:E73", "H14:H73")
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("sheet1").Range(Rng(Cnt)) = WorksheetFunction.Transpose(buf)
Cnt = Cnt + 1
Loop
(すみません。質問欄にはB1:B10,E1:E10,H1:H10と書きましたが、実際に使用するセルはB14:B73", "E14:E73", "H14:H73です)
これを実行したところ、B14:B73にはきちんと入るのですが、EとHには何も数字が入りません。
No.5
- 回答日時:
再度の登場、onlyromです。
>「オブジェクト変数またはWITH ブロック変数が設定されていません」というエラーが出ました・・
軽くテストしてありますのでエラーが出るのは、???です。
また、テキストデータがどんなものであれ上手くいくはずです。
コードのその部分だけではなく全てをアップしてください。
No.3
- 回答日時:
ANo.1です。
>試したところ、B列に1~100の数字が入ってしまいました・・・。
セル範囲を10個しか指定してないのに100個もデータが入ったのですか?
そのコードを提示できますか?
この回答への補足
おはようございます。
すみません。100は間違いで、B列(B1:B10)に1~10の数字が入って処理が終わってしまいました。コードは下記の通りです。
(変数iは使用していたのでxにしました)
例)
Dim x As Integer
x = 0
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("Sheet1").Range("B1").Offset(, x).Resize(10) = WorksheetFunction.Transpose(buf)
x = x + 3
Loop
No.2
- 回答日時:
回答1と同じようなものですが、、、(^^;;;
'-----------------------------------------
Dim Cnt As Integer
Dim Rng
Rng = Array("B1:B10", "E1:E10", "H1:H10")
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("sheet1").Range(Rng(Cnt)) = WorksheetFunction.Transpose(buf)
Cnt = Cnt + 1
Loop
'--------------------------------------
この回答への補足
ご回答ありがとうございます。
Dim Cnt As Integer
Dim Rng As Range
Rng = Array("B1:B10", "E1:E10", "H1:H10")
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("sheet1").Range(Rng(Cnt)) = WorksheetFunction.Transpose(buf)
Cnt = Cnt + 1
Loop
上記を実行したところ、「オブジェクト変数またはWITH ブロック変数が設定されていません」というエラーが出ました・・。
No.1
- 回答日時:
Dim i As Integer
i = 0
Do Until EOF(intFF)
Line Input #intFF, tmp
buf = Split(tmp, ",")
Worksheets("Sheet1").Range("B1").Offset(, i).Resize(10) = WorksheetFunction.Transpose(buf)
i = i + 3
Loop
こうゆう事ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで、 A1セルに「A」という値、 B1セルに「B」という値が入っています。 どちらも表示形式 5 2023/02/22 23:05
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Excel(エクセル) 【EXCEL】空白でないセルの位置を検索したい 3 2022/04/26 22:03
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
【VBA】写真の貼り付けコードが...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
EXCEL VBA 文中の書式ごと複写...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
入力規則のリスト選択
-
特定の色のついたセルを削除
-
VBAでユーザーフォームにセル値...
-
VBA にて、条件付き書式で背景...
-
DataGridViewのフォーカス遷移...
-
【エクセルVBA】写真挿入の2枚...
-
Excel VBAでCheckboxの名前を変...
-
昨日、質問した件『VBA にて、...
-
下記のマクロの説明(意味)を...
-
C# DataGridViewで複数選択した...
-
QRコード作成マクロについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
下記のマクロの説明(意味)を...
-
Excel VBAでCheckboxの名前を変...
-
【VBA】写真の貼り付けコードが...
-
特定の色のついたセルを削除
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
DataGridViewのフォーカス遷移...
-
関数の引数でrangeを指定したとき
-
入力規則のリスト選択
-
DataGridViewで指定したセルの...
-
VBAでユーザーフォームにセル値...
-
複数指定セルの可視セルのみを...
おすすめ情報