重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

明日までに集計作業を終わらせる必要がありますが、VBA等できないので
どなたかお知恵をお貸し頂けないでしょうか。

30,000行近くあるテキストファイルがあります。
データが全て縦に並んでいます。
これを、Excelに出力したいです。

出力条件は、横方向に【一行】を【1セル】で出力したいです。
完全に横一行にするのではなく、特定行で改行を入れたいのです。


***具体例***
①下記の【===========】内が1つのデータです。
②下記の【===========】内は、10行のときもあれば3行の時もあります。
③Excel出力時は、セルの左側から埋めていく形にしたいです。
================================
2024/10/10(木)16:41
1等賞!
2024/10/09
================================

宜しくお願い致します。

「【Excel VBA】 テキストファイル」の質問画像

A 回答 (4件)

やり方がベストかは分かりませんが、VBAを使わずに自分なら・・・ということで。



①Wordの文字の置き換えを使って1行ずつのデータに整形。
 
 オプションの特殊文字で、改行を何かの文字に置換
 ================を改行に置換

 2024/10/10(木)16:41●1等賞!●2024/10/09●
 2024/10/10(木)16:41●1等賞!●2024/10/09●あああああ●
 2024/10/10(木)16:41●1等賞!●2024/10/09●

②作ったデータをExcelにコピー後、データツールの区切り位置を使って区切る。
    • good
    • 1
この回答へのお礼

迅速なご回答有難うございました。
勉強になりました。本当に助かりました。
ご教示頂いた方法で試したところデータの集計ができました。
一番最初にご回答をくださったpoco_2さんをベストアンサーに選ばせて頂きます。

お礼日時:2024/10/18 15:44

データの中にバッチに使えない文字が現れない、って前提なら、バッチで吐いて、Excelで読むのが簡単ではなかろうか…


例えば下記をメモ帳なんかで goo.cmd ファイルに書いて、
@echo off
setlocal EnableDelayedExpansion
set str=
for /F "delims=" %%a in (%1) do (
if "%%a" EQU "===" (
if defined str echo !str!
set str=
) else (
if defined str (
set str=!str! %%a
rem 上の!str! の後ろはタブコード。
) else (
set str=%%a
)
)
)
コマンドプロンプトで
C:\xxx>goo.cmd データファイル > abc-tab.txt
を実行して、abc-tab.txt をExcel でタブ区切りテキストとして読み込む。

※ "===" は現物の長さに合わせる事
    • good
    • 1
この回答へのお礼

ご回答有難うございました(*- -)(*_ _)
ご丁寧にご記載頂き、大変勉強になりました。
次に大量のデータ集計があったときには
是非この方法も試してみたいです。

お礼日時:2024/10/18 15:47

私のやっていたことですが、



1:テキストファイルに出力する
2:wordに読み込む
3:wordの置換機能で特殊文字などを@に変換したりする
(区切り文字を仕込む)
4:エクセルにCSVとして読ませる

こういう経路を辿れば、割と作業がはかどると思います。

例題で言えば・・
改行を,にする
=====を@にする

エクセルで@を区切り文字に指定すれば、恐らく、目的に近い結果を得られるのではないかと思います。
wordには、特殊文字(改行記号)などを検索・置換する機能があります。
これを利用すれば、いいかと思います。
    • good
    • 1
この回答へのお礼

ご回答有難うございました(*- -)(*_ _)
ご丁寧にご記載頂き、大変勉強になりました。
次に大量のデータ集計があったときには
是非この方法も試してみたいです。

お礼日時:2024/10/18 15:47

こんにちは



>VBA等できないので
>どなたかお知恵をお貸し頂けないでしょうか
作成依頼をしたいのなら、ここのような質問サイトではなく、依頼サイトになさった方が効果的と思います。


>【===========】内が1つのデータです。
区切りになっている【===========】というのが全て同じ文字列なら、関数でも可能でしょう。

1)テキストファイル、またはCSVとしてシートに読み込みます。
 この結果、A列に文字列が縦に並びます

2)Office365等であればC1セルに
 (365以前のバージョンでも、式を作成すれば同様のことが可能です)
  =FILTER(ROW(A:A),A:A=区切り文字列,"")
 を入力すると、区切り文字のある行番号がC列にスピルされます。

3)D1セルに
  =IF(C2<>"",TRANSPOSE(OFFSET(A$1,C1,0,C2-C1-1)),"")
 を入力して、右下隅をダブルクリック(又は下方にフィルコピー)
 すると、D列以降に、ご希望の結果がスピルされます。

4)そのままだと関数値なので、セル全体をコピー、値をペースト
 で固定値化します。
 その後、A:C列を削除すればお求めの結果になります。
    • good
    • 1
この回答へのお礼

ご回答有難うございましたm(_ _"m)
ご丁寧にご記載頂き、大変勉強になりました。
次に大量のデータ集計があったときには
是非この方法も試してみたいです。

お礼日時:2024/10/18 15:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!