• ベストアンサー

Excelへの大量の01文字列データの取込み

テキストデータで0と1で表現した1行 数百万文字のデータがあります。 これをEXCEL2016のシートにコピー&ペーストで取り込むと、1セルあたり32765文字のデータで溢れてしまいます。 これを自分で指定した任意の文字数ずつ以下のように格納するにはどうしたら良いでしょうか? (以下は100文字指定の格納例) A1=100文字 A2=100文字 : : A100=100文字 : : エクセルVBAで処理できるとありがたいです。 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (729/1515)
回答No.5

今調べたら、VBA で扱える文字列は約20億文字でした。 (私はてっきり昔のBASIC の様に 65536文字と思い込んでいてあのような袱紗綱プログラムになりました) 変更点 ・ファイルは1回ですべて読むようにした ・プログラム頭で文字数の変更を可能にした ・テキストファイルに変更しました。 Option Explicit ' Sub Macro1() Const Length = 100 Dim File As String Dim Index As Long ' [A:A].ClearContents [A:A].NumberFormatLocal = "@" File = Application.GetOpenFilename("テキストファイル,*.txt") ' If File = "False" Then End End If Open File For Input As #1 Application.ScreenUpdating = False Line Input #1, File ' For Index = 1 To Len(File) Step Length Cells(Index / Length + 1, "A") = Mid(File, Index, Length) Next Index Close End Sub 前回答を消したい。

taka1331yuki
質問者

お礼

改良版upいただきありがとうございました。おかげでデータ整理できました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • NuboChan
  • ベストアンサー率47% (752/1594)
回答No.4

すいません。 指定行数ではなく指定文字数でしたね。 No.3さんとほぼ同じですがUpしますね。 Input関数では、1行の文字数に制限はないようなので  巨大ファイルでも行けそうですが簡単な検証しか行っていないので  上手くいかない場合は破棄してください。 テキストファイルのパスと名前、  分割する文字数は、コード内で変更できます。  また、出力するセルの位置も、RowとColの変数で調整できます。 Option Explicit Sub test() Dim FileName As String 'テキストファイルの名前 Dim FileNum As Integer 'テキストファイルの番号 Dim TextLine As String 'テキストファイルの1行分の文字列 Dim CharNum As Integer '分割する文字数 Dim Row As Integer '出力する行番号 Dim Col As Integer '出力する列番号 Dim i As Long FileName = "C:\Users\TAC_\Desktop\test.txt" 'ターゲットテキスト FileNum = FreeFile 'テキストファイルの番号 CharNum = 5 '分割する文字数 Row = 1 '出力する行番号 Col = 1 '出力する列番号 Open FileName For Input As FileNum 'テキストファイルの読み込み Columns(1).NumberFormatLocal = "@" '文字列に Do Until EOF(FileNum) ' Line Input #FileNum, TextLine 'テキストファイルから1行分の文字列を読み込む For i = 1 To Len(TextLine) Step CharNum '文字列の長さ分だけCharNumごとに繰り返す Cells(Row, Col) = Mid(TextLine, i, CharNum) '文字列を指定文字数で分割してセルに書き出す Row = Row + 1 '出力する行番号を1増やす Next i Loop Close FileNum 'テキストファイルを閉じる End Sub

taka1331yuki
質問者

お礼

再度回答いただきありがとうございました。皆さんの回答を参考に頑張ってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率48% (729/1515)
回答No.3

ファイルの指定方法がわからないので、ダイアログボックスにしました。 Option Explicit ' Sub Macro1()   Dim File As String   Dim ROut As Long '   [A:A].NumberFormatLocal = "@"   File = Application.GetOpenFilename("CSVファイル,*.csv") '   If File = "False" Then     End   End If   Open File For Input As #1   Application.ScreenUpdating = False '   Do While Not EOF(1)     ROut = ROut + 1     On Error GoTo 100     File = Input(100, #1)     On Error GoTo 0     Cells(ROut, "A") = WorksheetFunction.Clean(File)   Loop   Close 100 '   If Err <> 62 Then     Error Err   End If   Close End Sub 調べたけれど、文字数指定で読める命令は INPUT関数しかありませんでした。 やって見たけれど、この命令文字数が 100で割り切れないとエラーになります。 ON ERRORを使った、汚いプログラムですが。

taka1331yuki
質問者

補足

回答ありがとうございます。 情報足りずすいません。入力ファイルは.txtデータを読み込められれば指定方法に希望はありません。 このコードはvbaに入力し、文字数指定はコード内で行うということで合ってますか?

全文を見る
すると、全ての回答が全文表示されます。
  • NuboChan
  • ベストアンサー率47% (752/1594)
回答No.2

そもそも1行が数百万文字のテキストファイルなのでEmEditorを利用しているのでしょうね。 以下参照ください。 1)PowerShellで指定文字数に分割したテキストファイルを作成後 https://tsuredurediary.com/archives/windows-textfile-split.html https://aprico-media.com/posts/9497 2)EXCELのセルに分割したファイルを読み込ませれば出来ると思います。 https://kirinote.com/excelvba-txtfile-paste/. https://www.higashisalary.com/entry/read-some-text.

taka1331yuki
質問者

補足

回答ありがとうございます。1)のリンクを確認すると指定文字数ではなく指定行数データの分割になっているのですが、今回の1行のデータの分割にも活用可能なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • Bn4Cm9a
  • ベストアンサー率18% (19/103)
回答No.1

ずばりの回答ではない。 > VBAでバイナリファイルを読み込む(一括、1バイト、指定バイト) https://vbabeginner.net/read-binary-file/ を参考に100バイトずつファイルを読むと、その中身は0か1のアスキーコードになる。違うとしても2種類だ。配列の中身を0か1に置き換え、セルに書き込む。 をできそだと私は思った。

taka1331yuki
質問者

お礼

回答ありがとうございました。いまいちバイナリファイルの読み込みやデータの置き換えが分からず。。もう少し考えてみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの文字抜き取り

    エクセルでも、エクセルVBAでも結構ですので 何方かお知恵をお貸しください。 文字と数字の混在したテキストデータ(複数行)を エクセルに取り込む際に、任意の場所で区切り それぞれを、セルに格納したいのですが どうすれば良いか分かりません。 例としては、   123456AAAAAAA888888ZZZZZ のテキストデータをエクセルに取り込む際に 自動で指定した位置で区切り、各セルに格納を行いたい。   12345 AAAAAAA 88888 ZZZZZZ 区切る位置は固定です。 テキストファイルを取り込む際の処理でも良いですし 一旦、連続したデータをエクセルに取り込んでからの 処理でも結構ですので、宜しくお願い致します。

  • EXCELへの文字数の多いテキストの取り込み

    テキストデータで70000文字で改行して、全部で40行あるデータがあります。これをEXCEL2010のシートに取り込みたいのですが、外部データの取り込みで行うと、1セルあたり32767 文字で溢れてしまいます。 A1=30000文字 B1=30000文字 C1=10000文字 改行 D1=30000文字 E1=30000文字 F1=10000文字 改行・・・・・ と取り込むにはどうしたらいいでしょうか。テキストデータはデスクトップにあります。 VBA等教えて下さい。よろしくお願いします。

  • アクセスの外部データ(エクセル)の取り込み。VBA

    アクセスの外部データ(エクセル)の取り込み。VBAの質問です。 アクセス2003 エクセル2003 不要な行・列がある場合の外部データ取り込みVBAを教えて下さい。 今は、エクセルで削除して取り込んでいます。 アクセスに「得意先リスト」というテーブルを作っています。 コード(テキスト型)主キー 名称(テキスト型) フリガナ(テキスト型) 郵便番号(テキスト型) 住所1(テキスト型) 住所2(テキスト型) TEL(テキスト型) FAX(テキスト型) エクセルブック[得意先リスト.xls] シートは「リスト形式」のみです。 1~4行は不要。 5行目が見出しです。 A~AZ列までデータがあります。 必要な列は、B・C・D・F・G・H・M・N列です。 セルの書式設定は「文字列」です。 [アクセス エクセル インポート 行 列 削除]などでサンプルVBAを探しましたが見つからなかったので質問させて頂きました。 申し訳ありませんが、教えて下さい。

  • VBAでの100万行以上のデータの取り込み

    どなたかご教示お願いいたします。 VBAで100万行以上のCSVデータの取り込みは可能でしょうか? 初心者なのでファイルを開いてセルに入れてから範囲を指定し配列に 取り込み処理しておりましたが100万行以上だとデータがシートから出てしまいます。 なのでエクセルに展開せずに配列に取り込むなどということはできるのでしょうか? もし可能であればあつかましいのですが、A列の120万行データを配列に取り込むサンプルをご教示いただけるとありがたいのですが・・・ よろしくお願いいたします。

  • エクセルVBAで、指定した文字列間のデータをコピー

     似たようなものがあるのですが、うまくいかないため、 詳しい方お願いします。  指定した2種類の文字列間のデータをコピーするエクセルVBAです。 データは、A1~A50の1列に入っています。 たとえば 北海道:札幌50 函館 20 青森 青森60 弘前30 岩手 盛岡50 rt 500 30 秋田 秋田1 と続きます。 「青森という文字列以降」から「岩手という文字列の前まで」の間のデータ をコピーして、Sheet2へ貼り付けたいです。 可能であれば、青森のデータは、Sheet2のA5,A6へ 岩手のデータはSheet2のA8,A9へ貼り付けたいです。 よろしくお願いします。 エクセル2007です。

  • Excelのシートにある全文字列を拾い出す

    Excelのシートに表(50列×50行)があり、その中のセルは任意に結合され、そのセルの中に文字列(単語)が入力してあります。 今回、その用語の索引をExcelで作りたく、その全文字を縦1列に拾い出したいのですが、効率的な方法を教えて下さい。 Excelは2003です。

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • エクセルVBA 文字列複数行・列連続連結

    エクセルVBA 文字列複数行・列連続連結でお教え下さい A列に基本文字(縦順) B列~F列に複数行データー(文字・時間) 文字結合時に改行 例 A2&B2&改行&A3&C2&改行&A4&D2&改行・・・・・ 次のデーター行 A&B3&改行&A3&C3&改行&A4&D3&改行・・・・・ データーの最終行まで連続で このような複数行あるデーターの連続文字列連結をしたいのですが・・・ 文字列連結後は 1.指定セルに貼り付け 2.クリップボードに貼り付け 3.テキストファイルに保存 よろしくお願い致します

  • エクセルVBA 文字列の検索

    お知恵をお貸しいただけますと幸いです。 複数のシートがあるエクセルブックで、sheet1のA1には文字列(例:あああ)が入っています。 sheet2のA1には「=sheet1!A1」が入っており、sheet3のA1には「=sheet2!A1」としています。 また、必ずsheet1にデータが入っているわけではなく、sheet2・sheet3から入力されている場合もあります。 VBAを使って任意のシートから「あああ」を検索したいのですが、この場合sheet2と3では検索できません。 どうすれば検索することができるでしょうか? どうぞご教授くださいますようお願いします。

  • Excel VBA 値取得について

    お世話になります。 どなたかお力をお貸しください。 Excel2003 VBAでプログラムを組んでおり、エクセルのシートをデータベース代わりに利用しています。 複数のブック散乱している10万個近くのテキストボックスの値を、 「A」というブックの「シート1」のセルに格納して行きたいと思っております。 値の格納方法としては、「A」ブックの「シート1」の セルA1からA2、A3…A列最終行(6万強)まで縦の並びにデータを格納していきます。 ただし、「シート1」に格納したい値は10万個近くあるので、 A列だけでは足りなくなります。 A列の最終行まで値を格納し終えたら、自動的にB列に移動して、 セルB1からB2、B3…B列最終行(6万強)という遷移させていきたいのです。 A列のみに格納していくのであれば、理解できるのですが、 自動遷移がわかりません。 For i = 0 To 最終行(6万強) シート1.Range("A" & i) = 参照元 Next i よろしくお願いします。

このQ&Aのポイント
  • EP982A3プリンタで電源投入すると、すぐにピーピーピーと鳴り、スキャナーエラーが発生します。
  • 電源を入れなおしても同様のエラーが発生します。
  • 修理窓口にご相談ください。
回答を見る

専門家に質問してみよう