質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

2回答

5153閲覧

VBA、VBSカラム(列)の移動方法

terajing

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2017/05/07 08:35

###前提・実現したいこと
①tsvファイルを読み込みます。
②不要なカラムを削除します。
③ある特定の文字列が含まれているカラムを指定の位置に移動させます。
④ヘッダーの文言を変更します。
⑤csv(shift-jis)に変更して保存します。

※tsvファイルのデータの内容は
前0の数値があったり、
256byteを越える自由記述のテキストが含まれているデータになります。
そのため、
前0のデータは文字列に
256byteの自由記述のテキストは文字列にすると#になってしまうことが
あるため、読み込み方法を気をつける必要があります。

###該当のソースコード
tsv⇒csvに変換できましたが
カラムの検索の仕方がわかりません。
単純にtsvをエクセルに張り付けて、検索するのはできますが
filesystemobjectなどを使用してカラム削除したりカラム移動する方法を教えていただけないでしょうか?

Do Until objReadStream.AtEndOfLine = True
'1 行読み込み
strLine = objReadStream.ReadLine

'区切り文字を置換(この例ではカンマからタブ)
strLine = replace(strLine, vbTab, ",")

'ファイルに出力
objWriteStream.WriteLine strLine
Loop

###補足情報(言語/FW/ツール等のバージョンなど)
VBA,VBSです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

前の回答者からも提案されてますが、
1行読み込んで、Splitで配列に分割して、配列で削除、入れ替え等の処理を行う。
それをJoin関数などで文字列に戻して、WriteLineで書き込む、という処理をすることになりますね。

ただ、よほど大きなファイルでないなら、ReadAll で一気にメモリに読み込んで、
Splitで改行で分割、分割したものを、さらにTabで分割して処理する。
で一つの文字列変数にまとめて、Writeで一気に書き込む、というようにした方が
高速に処理できます。

追記

下記のような感じのコードになります。ご参考に。

'全文読み込み strTxt = objReadStream.ReadAll '改行で分割、1行毎の配列 aryLine = Replace(strTxt, vbCrLf) For i = LBound(aryLine) To UBound(aryLine) 'タブで分割、列毎の配列 aryCol = Split(aryLine(i), vbTab) aryCol(0) = aryCol(0) & "," 'カンマ区切り付加 aryCol(1) = aryCol(1) & "," 'カンマ区切り付加 aryCol(2) = "" '不要なカラム(3列目)の削除 aryCol(3) = aryCol(3) & "," 'カンマ区切り付加 '以下、配列に対して列の移動、テキスト変更等の処理 aryLine(i) = Join(aryCol, "") '列を結合して行に戻す Next i strTxt = Join(aryLine, vbCrLf) '行を改行区切りで結合 'ファイルに出力 objWriteStream.Write strTxt

投稿2017/05/07 10:17

編集2017/05/07 15:36
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terajing

2017/05/07 11:00

丁寧に教えてくださいましてどうもありがとうございます。試してみます。
guest

0

Split 関数 を使えば指定文字で文字列を分割できます。

投稿2017/05/07 09:04

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terajing

2017/05/07 10:59

ありがとうございます。splitでためしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問