
Sub CSV入力2()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long, k As Long
Dim lngQuote As Long
Dim strCell As String
varFileName = Application.GetOpenFilename(FileFilter:="210513(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If
intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン
i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
j = 0
lngQuote = 0
strCell = ""
For k = 1 To Len(strRec)
Select Case Mid(strRec, k, 1)
Case "," '「"」が偶数なら区切り、奇数ならただの文字
If lngQuote Mod 2 = 0 Then
Call PutCell(i, j, strCell, lngQuote)
Else
strCell = strCell & Mid(strRec, k, 1)
End If
Case """" '「"」のカウントをとる
lngQuote = lngQuote + 1
strCell = strCell & Mid(strRec, k, 1)
Case Else
strCell = strCell & Mid(strRec, k, 1)
End Select
Next
'最終列の処理
Call PutCell(i, j, strCell, lngQuote)
Loop
Close #intFree
End Sub
Sub PutCell(ByRef i As Long, ByRef j As Long, ByRef strCell As String, ByRef lngQuote As Long)
j = j + 1
'「""」を「"」で置換
strCell = Replace(strCell, """""", """")
'前後の「"」を削除
If Left(strCell, 1) = """" And Right(strCell, 1) = """" Then
strCell = Mid(strCell, 2, Len(strCell) - 2)
End If
Cells(i, j) = strCell
strCell = ""
lngQuote = 0
End Sub
上記のようなCSVファイルの書き出しのコードを見つけて実行してみました。
できたのですが、希望は、書き出す時に行と列を入れ替えて書き出したいのですがどこを変更したらいいでしょうか?
また、次に書き出す時は次の列から書き出したいのです。
お願いします。教えてください。
No.3ベストアンサー
- 回答日時:
#1です
>必要な数値だけかきだす事
意味する所が分からないのですが、数値以外は不要と言う事でしょうか?
ご質問のコードで出力データを加工するのであれば、書き出し前の
Cells(i, j) = strCell の上行で処理すれば良いと思います。
数値のみにする場合は、正規表現などを使用して加工するのはどうでしょう
具体的には、(Cells(i, j) = strCellを含め書き換えて)
文字列=文字&数値&文字&数値&文字、、、を想定
Dim reMch, reVl, Nu
With CreateObject("VBScript.RegExp")
.Pattern = "[0-9,.]+" '数値の塊
.Global = True
Set reMch = .Execute(strCell)
If reMch.Count > 0 Then
For Each reVl In reMch
Nu = Nu & reVl
Next
End If
End With
Cells(j, i) = Nu
(変数名適当)
結果は数値&数値&・・・となると思います。
初めの数値のみで良ければ Nu = Nu & reVl:ExitFor
初めと次の数値の区切りを付加するならNu = Nu & reVl & "区切り文字"
最後に右1文字を削除
更に条件で絞るなら、出力前で加工すれば良いと思います。
ファンクションなどにした方が良いかもですが、
後付けなので取敢えずですが、解釈が違っていたらごめんなさい。
余談
ご質問のコードは昔、試した事があります。
結局使う事はなかったのですが、、
#2様がアドバイスされている通り、1文字ずつ処理をするより
QueryTables(CSVインポートウイザードで記録されるマクロ)などで
シートにデータを取得して、データ範囲をTranspose=Trueでコピペ
した方が良いかもです。QueryTablesに数値のみにするメソッドがあったかは、不明ですけれどね
No.2
- 回答日時:
こんにちは
ざっとしか見ていませんが・・・
ご提示のコードはCSVを1行ずつ読み込んで解釈しているようですが、エクセルはCSVファイルを読み込めるので、直接読み込ませた方が簡単です。
(面倒なクォーテーションの処理などしなくてもよくなります)
>書き出す時に行と列を入れ替えて書き出したいのですが
>どこを変更したらいいでしょうか?
変更というよりも、上で述べたように
1)新しいブックとしてCSVを開く。
2)データ全体をTransposeしてコピペ。
3)CSVのブックを閉じる(保存しない)
の手順で行うのが簡単だと思います。
>また、次に書き出す時は次の列から書き出したいのです。
上の2)のペーストの際に、
書き出し側のUsedRange以降、あるいは、お決まりのEnd(xlUp)で最終行を調べてその次の行からペーストするようにすれば宜しいかと。
順次書き加えていくと、どこかで行数オーバーになる可能性があるので、事前にする必要があるのかも知れません。
No.1
- 回答日時:
こんにちは、さっくりなので違うかもですが
i j 共にループでないカウント変数なので
書き出しコードの i j を入れ替えると、、どうでしょう?
Cells(j, i) = strCell
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルでの日付設定「yyyy...
-
マクロから出力されるcsvのダブ...
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
バッチでCSVを処理する時、空の...
-
複数のcsvファイルをフォルダご...
-
【エクセル マクロ】読み込ん...
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
csvファイルのデータをCで読み...
-
c#でcsvから指定の1行だけを読...
-
csvファイルのデータの一部を取...
-
複数のCSVファイルのAccessテー...
-
データ解析ソフトRでのファイル...
-
COBOLでCSVをインプットにして...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
【C#】パス名で無効な文字
-
CSV形式での保存時に”文字列...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
VBAでcsvファイルを読み込んで...
-
データ解析ソフトRでのファイル...
-
【エクセルVBA】お願いします。...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルのデータの一部を取...
-
CSVファイル作成
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
複数のcsvファイルをExcelに一...
-
【エクセル マクロ】読み込ん...
-
複数のCSVファイルのAccessテー...
おすすめ情報
できましたw
ちなみに教えてください。
色々な事を書き出してくれるのですが、必要な数値だけかきだす事って可能でしょうか?