VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。
1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。
読み込むテキストファイルは
_________0_________1_________2・・・・________10
_______100________51
のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり)

以下のように作ったのですが、改行のあるところからずれてしまいます。


Sub ファイル読み込み()
Dim buf(30000000) As String
Dim i As Long
i = 0
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile("C:\test.text", 1)
Do While .AtEndOfStream <> True

buf(i) = .read(10)

Loop
End With
End With

End Sub

「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。

どなたかご教授よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>改行のところでエラーとなってしまいます;


i = 0
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile("C:\test.text", 1)
Do While .AtEndOfStream <> True
Do While .AtEndOfLine <> True
buf(i) = .read(10)
i = i + 1
Loop
.skipLine '改行をスキップ
Loop
End With
End With
てな感じでやっていますか?
一応ウチの環境ではこれでうまくいきました。
あと、Stringが256バイトまでしか読めないって本当ですか?
OSは、なんでしょう?
最終的にセルに入らなかったからでは?

bufについては、他の人も指摘されていますが、ローカル変数にするのは、サイズが大きいので、大域変数にするか、最終的にセルに格納するならセルに入れるようにしたらどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます!
出来ました。

256文字までしか読めないと言ったのですが、
デバックのクイックウォッチでBuf(i)を確認したら256までしか入ってなかったので「256までしか駄目なのか~」と思ってしまいました。
今Buf(i)をCellに書き出したらちゃんと読み込めてました。早とちりして申し訳ないです。

.skipLine '改行をスキップ
↑これ入れてなかった為エラーとなっていたようです。

とても参考になりました。ありがとうございます。
(Bufについては、実は300万超えのデータもあるようなのである程度読み込んだら書き出してクリアする等の方法を取ってみます。「大域変数」について調べてみたのですがちょいと難しそう@@)

お礼日時:2005/04/24 19:09

私の書いていた話は、あまり理解されていないような気がしますから、論より証拠で、私の言っていたコードも公開しておきます。

一行、6K のチェックもしました。ただ、その処理は、テキストで再びOutputするなら、Read_OutLine_Testのように配列のBuf はいりませんね。

Sub ReadLine_Test()
 Dim Buf() As String
 Dim Textline As String
 Dim i As Long
 Const myFname As String = "C:\Test.txt"
 Open myFname For Input As #1
 Do While Not EOF(1)
  Line Input #1, Textline
  If Len(Textline) > 1 Then
   ReDim Preserve Buf(i)
   Buf(i) = Left(Textline, 10)
   i = i + 1
  End If
 Loop
 Close #1
End Sub

'---------------------------------------------
'テキスト出力用
Sub Read_OutLine_Test()
 Dim Buf As String '出力前段階のバッファ
 'Dim Buf As String * 10 '固定長ならこちら,Buf = TextLine
 Dim TextLine 'テキストInputデータ
 Dim inFno As Integer 'in用ファイルNo
 Dim outFno As Integer 'Out用ファイルNo
 '読み込みデータ
 Const InFname As String = "C:\Test.txt"
 '出力データ
 Const OutFname As String = "C:\Test2.txt"
 inFno = FreeFile
 Open InFname For Input As #inFno
 outFno = FreeFile
 Open OutFname For Output As #outFno
 Do While Not EOF(1)
  Line Input #inFno, TextLine
  If Len(TextLine) > 1 Then
   Buf = Left(TextLine, 10)
   'Buf = TextLine
   Write #outFno, Buf
  End If
 Loop
 Close #inFno
 Close #outFno
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おかげで対処することができました。

お礼日時:2005/04/25 09:46

>(正確には250万くらい)でも2文字ずつずれた状態ですが、全て確保はできました。


あっ、そうですか、入りましたか?
そんなにできるとは知りませんでしたね。

そのBuf は、後で、再び、Text あたりに出力するのでしょうか?そのために、Excelを使っているとしたら、多少、もったいないような気がしますが、シーケンシャルにするにしても、ランダムにするにしても、そのままではないですよね。

Excelで、シーケンシャルに入れていくのなら、静的領域のCells(i) [←この場合は左から右の横になる]で、データを埋め込む方法もありますね。

BLUEPIXYさん曰く
「Stringが256バイトまでしか読めないって本当ですか?」
 私も同感です。
もし、そうなら、どちらかというと、WSH の Version の問題なのかもしれませんが。

 Dim buf(30000000) As String
という組み方は、Excel 2000以上だったとは思いますね。
    • good
    • 0

まだ、良く質問がわかっていないのですが、いくつか疑問を感じています。


最初に、VBAとありますが、何のVBAですか?Excelですか?Wordですか?

 buf(i) = .read(10)
これって、10byte ではありませんよね。10語ですね。2byte 文字は存在しないのですか?それによって、コードは変わると思います。
FileSystemObject を使う必要があるのでしょうか?

単純なテキストファイルなら、Line Input ステートメントで、シーケンシャルモードで行が取れますね。

それから、なぜ、
Dim buf(30000000) As String
配列に、300万も必要ですか?VBAの配列の限界値そのものは知らないのですが、VBAでは、それだけの量になると、満杯になる前に、確保できないのではないでしょうか?数十メガになると思います。

Redim Preserve で確保していけばよいのではありませんか?

この回答への補足

ご回答ありがとうございます。

>最初に、VBAとありますが、何のVBAですか?Excelですか?Wordですか?

ExcelのVBAになります。

>これって、10byte ではありませんよね。10語ですね。2byte 文字は存在しないのですか?それによって、コードは変わると思います。
失礼しました。10バイトではなく10語ですね。ですが2バイト文字は存在しません。

質問事項にも書いてありますが、1行の文字列が多いため読みきれません。

Dim buf as String


buf = .ReadLine

とやっても256バイトまでしか読みきれないのです。

あと配列が300万と定義していますが、実際に必要なんです。(正確には250万くらい)でも2文字ずつずれた状態ですが、全て確保はできました。

Outputは格納したデータを複数のシートにわけて
1つの列に書き込んでいきます。

補足日時:2005/04/23 10:21
    • good
    • 0

>「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。


試してはいませんが、
AtEndOfLineが使えるのではないかと思います。

この回答への補足

回答ありがとうございます。
AtEndOfLineも試してみたのですが、

Do While .AtEndOfLine <> True

buf(i) = .read(10)

とやると、改行のところでエラーとなってしまいます;

補足日時:2005/04/23 10:35
    • good
    • 0

buf(i) = .read(10)


で、一項目ずつ読むのではなく
一行分のバッファを準備し、Readlineで一行分まとめて読み出し
そのバッファから、一項目ずつ拾い出せば改行コードを意識しなくても良いと
思いますが

注)関数内変数で、巨大なバッファを確保するとトラブルの元なので
  バッファは静的領域に確保した方がよいと思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q空白行の多いHTMLにはどんな意味が

たまにHPのソースをみるのですが、
以下のサイトのように空白行が異常に多いものがあります。
http://www.ereform.net/
これはどんな意味があるのでしょうか?
Googleに上位表示されていますので、気になりました。

よろしくお願いします。

Aベストアンサー

絶対そうだ!という確証は持てませんが、

WYSIWYG(ビルダーのように見た目で制作できるもの)
の中には、HTMLがそのようになるものもあるようです。

意味はそんなに無いと思います。ソフトのバグでしょう。
SEO対策の本でも
「ソースの中に大量に改行を入れるとアクセスアップする」
というのは見た事ないですね。

Qオブジェクト変数またはwithブロック変数が設定されてません

またまた おねがいします。
x に特定セルを入れてあります。
コピーし、形式を選択して貼り付けで
値だけ、行列を入れかえる・・・と考え、
下記の記述になりました。
しかし、実行してみると
エラーで
「オブジェクト変数またはwithブロック変数が設定されてません。」
と、でます。

x.PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True

アドバイスをお願いします。

Aベストアンサー

この質問には質問に載せた以前の部分を載せる必要があるのじゃないかと思う。
また下記後半に貼り付け先に疑問を持ったので記してみる。杞憂と思うなら無視していただいて結構。
(私は、この問題をVBAでやるのは結構難しいなと思ったので)
ーー
それは(1)コピーする範囲指定の問題。
私は
Sub test01()
Set x = Application.InputBox("範囲", Type:=8)
Set y = Application.InputBox("貼り付け先", Type:=8)
x.Copy
If Intersect(x, y) Is Nothing Then
y.Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
MsgBox " 貼り付け先訂正"
End If
End Sub
としてみた。これで1セル以上は絶対に指定されるので、「コピー元がなし」は、なくなると思う。
ーー
(2)トランスポーズして張り付ける先(極端に言えば左上隅セル)
だが、コピー元との位置関係で適当でないとエラーが出るようだ。
多分もとのコピー先の範囲と、行列を反転した範囲が共通部分を持つ場合にエラーが出るのではないかと思う。私はとりあえずINTERSECTで上記程度で、ごまかしたが、行列を反転した範囲を割り出す必要があるのかなと思うがややこしそうなので、とりあえずこのままにしますが、この点どうでしょう?

この質問には質問に載せた以前の部分を載せる必要があるのじゃないかと思う。
また下記後半に貼り付け先に疑問を持ったので記してみる。杞憂と思うなら無視していただいて結構。
(私は、この問題をVBAでやるのは結構難しいなと思ったので)
ーー
それは(1)コピーする範囲指定の問題。
私は
Sub test01()
Set x = Application.InputBox("範囲", Type:=8)
Set y = Application.InputBox("貼り付け先", Type:=8)
x.Copy
If Intersect(x, y) Is Nothing Then
y.Select
Selection.Paste...続きを読む

Q空白の数年間は、何の意味もなかったのでしょうか

学校を卒業して数年が経ちました。なんとか働いていますが、この数年を思い返すと空白のように感じます。
今、私には友達がいません。学生時代の友達とは次第に疎遠に。前職で仲が良かった人も、転職して半年が経てばやり取りもなくなってしまいました(私はプライベートでも仲が良かったつもりだったけれど、相手からすれば仕事だけの関係だったのだなと少し寂しいです)趣味を通じてできた友人は、その趣味に飽きてしまうと話が合わなくなってしまいました。趣味だけが共通項で、唯一の繋がりだったと離れてから気付きました。
お仕事は、これといってやりがいがあるわけではないですがお給料とために働いています。無趣味なのでお金は貯まる一方で、何かに使いたいと思いつつも、使いたいものが何も思いつきません。

年齢も年齢なので、周囲に家庭を持ったり、昇進する人も多いです。親から「お前はこの数年間何をしてたんだ」と嘆かれました。振り返ると何も築けていません。友達や恋人との絆。仕事での功績。がむしゃらに走った割には、そういったものが何もなくて。この生きてきた数年間は無駄だったのではないか?と背筋が寒くなりました。

何を持って意味のある人生と言えるのでしょうか?
私は私の人生がつまらないし、恥ずかしいのです。
私の人生は価値があるものですか?あなたの人生は価値があるものですか?

学校を卒業して数年が経ちました。なんとか働いていますが、この数年を思い返すと空白のように感じます。
今、私には友達がいません。学生時代の友達とは次第に疎遠に。前職で仲が良かった人も、転職して半年が経てばやり取りもなくなってしまいました(私はプライベートでも仲が良かったつもりだったけれど、相手からすれば仕事だけの関係だったのだなと少し寂しいです)趣味を通じてできた友人は、その趣味に飽きてしまうと話が合わなくなってしまいました。趣味だけが共通項で、唯一の繋がりだったと離れてか...続きを読む

Aベストアンサー

意味のある人生。
私はそんなものは必要ないと思っているがね。
私はもうじき75歳だよ。
改めて自分の人生をふり返ってみても、何のために生きてきたのか皆目わからない。
正直「死ななかったから生きてきた」と言った程度の話で、空白の時代だらけ。
まあ、趣味は多いので、その時その時の状況に応じて楽しんでは来たがね。
が、それがなんだと言うのか。
結局は「自己満足」でしかないと思うよ。
生まれたくて生まれてきたのであれば意味のある人生にしたいかもしれないが、生まれたくて生まれてきたわけではない。
人生に意味なんて必要ないと思うがね。
仕事に関しても、「やりがいのある仕事」など一度もしたことがない。
仕事は「生きてゆくための糧を得るための手段」だと思っているので。

Q変数の宣言の名称を教えてください。(Dim i As Long)

Dim i As Longについて

「dim」→?
「i」→変数名
「As」→?
「Long」→変数の型

というように、dimとAsがなんと言えばいいのかわかりません。
アドバイスよろしくお願いします。

Aベストアンサー

>「i」→変数名
という形と合わせるのなら、以下のような感じでしょうか?
(意味についてのご質問ではないと受け取りました)

Dim・・・ステートメント
     変数の(型)宣言に用いる
AS・・・・キーワード
     変数や関数の型を示したり、フォルダ(やファイル)名を
     示したりするのに用いる

Q空白欄を消す

エクセルで、VLOOKを使い、エラー回避する為にIF関数を使っています。
検索結果出た後、空白セルを一括削除したくてジャンプしようとしたところ、本物の?空白セルではなかったのでできませんでした。
検索結果合致しなく空白になったセルの一括消去方法というのはありますか?
意味が通じにくいかもしれませんが、よろしくお願い致します。

Aベストアンサー

問題の数式が記入されているセル範囲を選択する(必ず行う)
Ctrl+Fで検索のダイアログを出す
ダイアログのオプションを開く
検索対象を「値」にする
検索する文字列は空っぽのまま,全て検索する

ダイアログの下にヒットしたセルが羅列されるので,ダイアログの中で全部選択する
ダイアログを閉じる
Deleteキーで削除する。



#もうちょっと簡単な方法:
数式で,IFを使って””にするのをやめてVLOOKUP関数に素直にエラー値を計算させる
Ctrl+Gを押す
現れたダイアログでセル選択をクリックする
現れたダイアログで数式にマーク,エラー値にチェック,OKする
Deleteする。

Q記録マクロは分かるのにDim(変数)が入ると分からない

 マクロ初心者です。記録マクロで色んなファイルを作り、活用は出来ているのですが、データーの増減、条件判定などが入ってくると必ず、Dim〇〇の記述が入ってきます。
 記録マクロのコード記述を読んで大体は読めるのですが、Dimになるとサッパリ分からなくなります。

 私にはこのDimが変数、代入と言うことは分かるのですが、では『具体的にこうなんだ、こうなるんだ』ということが理解できません。変数宣言を強制していません。

 過去のこのカテの類似質問を拝見しましたが、今一、理屈が分かっておりません。

 変数型マクロのサンプル例でこの辺を詳しく解説しているサイトをご存知でないでしょうか?
 VBA構文と日本語記述解説を対比して解説してあると分かり易いと思うのですが、書籍も探しています。
ご存知の方、教えていただけないでしょうか?

Aベストアンサー

こんにちは。

ご質問の趣旨は、変数型の宣言ということと解釈してよろしいですか?回答されている中には、変数の有無を述べた方もいるようですから。

1960ken様は、もう、かなりVBAは、経験されている方のはずですから、「変数の型の宣言」の必要性を考えるのは、上達してきた証拠でしょうね。私も、少し考え直してみました。僭越かもしれませんが、1960ken様のVBAに対するアプローチの仕方に少し問題があるかもしれません。

最初に、「変数宣言を強制(Option Explicit)」は、コーディングの際に入力ミスを減らすという目的だけです。間違えれば、エラーが出るか、目的の値が取れないだけです。本来、変数を宣言するというのは、使用中のメモリを減らすことにあります。

次に、「変数の型の宣言」(Dimステートメントなど)が本当に必要になるのは、中級から上級に掛けてで、ここの掲示板に出で来るコード10のうち9までは、変数の型の宣言は必要がありません。Basic系の言語は、あまり変数型をとやかく言っても、「自動キャスト」がありますから、いわばルール無用の世界です。何でもあり、なんです。
(「自動キャスト」というのは、データから自動的に適当な型に割り振ってしまう機能)

しょせん、ある程度上達してくると、みなさん、どうでも良くなります。型の宣言の必要性は、もう少し上のクラスの話です。しかし、変数自体が分からないのでしたら、自分でお金を払った初級レベルのExcelマクロの本を読んでみるしかありません。

とはいえ、多くの人が、日付文字列を平気で、Date型の変数に入れたり、文字列を、そのまま平気でRangeの引数にしてみたり、まあ、危なっかしいことを見せられるのが常です。そのレベルでは、逆に、「型の宣言」などしないほうがよいかもしれません。ひどい例では、プロパティ名を変数名にする人間がいますが、そんなことをしたら、ひとつのプロジェクト全体に影響してしまいます。

VBAには、VBにはない、独特の特徴があります。
しかし、そういうことを言ったところで、PC自体のスペックがあがるにつれ、問題が表面化しなくなり、「コードが通れば、文句あるか! 」と、逆切れされるのがオチで、しょせん、こういうのは、他人がどうこういうことではないかもしれません。ただし、基本が分かっていない人は、必ずミスします。(以下にある「VBA コードを最適化する」を参照)

初級のVBAですと、大雑把に言って、Long型とString型とObject型(Object型は、固有の変数型 例、Worksheet, WorkBookなどなら、なお良い)の三つでほとんどをカバーします。初級レベルのコードでは、単に格好付けだけで、何の意味もありません。

一応、簡単な割り振りの仕方を教えておきます。

例えば、Dim A とだけ入れて、As ○○を入れない変数が、ローカルウィンドウの中で、Variant/Range としたら、それは、As Range に割り振っておけばよいのです。Variant/Doubleと出たら、As Doubleとしておけばよいです。(注意:オブジェクト型すべてを、そのように割り振りはできないこともあります。)

書籍では、『かんたんプログラミンシリーズ Excel VBA 基礎編』(技術評論者)の第9章、「変数を理解しよう」に説明があります。(私の持っている本は、Excel 2002用です)。それ以上に詳しい説明は、井川はるき さんの『Excel VBAプロの技』(ナツメ社)の第1章に出てきますが、文章が冗長なので、多少読みにくい点があります。 後者は、一通りVBAがすべて分かっている人向けです。

本を読んだら、実際に、自分の指で、VB Editor画面に文字を入れてみて、それを、F8を押して、ステップインで動かしてみるのが一番です。語学学習と同じで、機械仕掛けで翻訳した英文が、正しいとは言えません。それを覚えたところで役に立ちません。基本文法を学び、その構文に自分の言葉を入れて応用してみるしか手がないと思います。ある程度のレベルになると、その人のコードで性格さえ判ります。

サイトというなら、MSDNライブラリを読んでみる価値はあると思います。一般サイトは、しょせん、どこかを書き写しているのがほとんどです。この内容は、現行VBAの原則です。

「VBA コードを最適化する」
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/modcore/html/deconoptimizingvbacode.asp

○変数の宣言が必要とされる代表的なサンプル
'(初級では出てきません)

''「なぜ、Currency型でなければならないか?」
'浮動小数点丸めに対しては、以下のような変数で防ぎます。
'ただし、数値リテラル値を直接入れるのは実務上はありません。
'これは、時間の計算、小数点が発生する演算、循環小数などに用いられます。
'実務では、金銭上の計算を用いるときに使われます。
'なお、必ずしも、「浮動小数点丸め誤差」が発生するわけではありません。

Sub BadSample1()
Dim ret As Double
 ret = 0.5 - 0.4 - 0.1
 MsgBox ret 'CStr(ret)
End Sub
'---------------------------------------------
Sub Sample2()
Dim ret As Currency
 ret = 0.5 - 0.4 - 0.1
 MsgBox ret 'CStr(ret)
End Sub
'---------------------------------------------
'または、
Sub Sample2a()
Dim ret As Double
 ret = 0.5 - 0.4 - 0.1@ 'Currency型
 MsgBox ret 'CStr(ret)
End Sub

'データ型の精度の違うものの比較
''「なぜ、違うと出るのか?」

Sub Sample3()
Dim a As Double
Dim b As Currency
Dim c As Double
Dim msg As String
 a = 49.8 - 12.1
 b = 49.8 - 12.1 'Currency型
 c = b '型を低精度にキャストしてしまったミス
If a <> c Then
  msg = "違う " & a - c
 Else
  msg = "同じ"
 End If
 MsgBox msg
End Sub

これは、隣接しているから分かりますが、離れてしたり、加筆していったりすると、分からなくなります。数値を比較する時や、他の型にキャストする時は、明示的に行う場合は除いて、自動キャストした場合、別の値に変わっていることがあります。(浮動小数点丸め誤差といいますが、小数点以下が入った数値の演算は、約半分ぐらいが、発生することがあります。上記の数値の組合せは、浮動小数点丸め誤差が発生します。)
(「明示的」というのは、VBAなどで良く使われる言葉で、意図して行うこと<->「暗黙的」)

 Mod 演算子など、Long型以上の精度を出力しない場合は、Long型以上の精度を持ったデータ型を用いても、精度は上がりません。求める値が何か、ということが、ここでは読み取れません。

Sub Sample4()
Dim a As Currency
 a = (49.8 - 12.1) Mod 4
 MsgBox a '実際は、Currency型の精度は出ていない
End Sub

Sub Sample5()
'修正例(私案)
Dim a As Currency
Dim b As Long
Dim c As Long
Dim d As Double
 a = 49.8 - 12.1 '浮動小数点誤差が発生する組合せ
 b = CLng(Fix(a * 10)) '小数点固定法
 c = b Mod 40
 d = c / 10
 MsgBox d 'CStr(d) 'Long型に戻すのも可
End Sub

上級では、Win32 API関数やBinaryコードを扱う場合に、どうしても、決められた変数(型)が必要になります。内容は割愛します。コードは、この板で実際にあった話を元にして作ったもので、十分に検証したつもりですが、私個人、この問題を明確に割り切れているわけではありません。一種の原則的なルールとして覚えていくほうが無難です。

参考URL:http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/modcore/html/deconoptimizingvbacode.asp

こんにちは。

ご質問の趣旨は、変数型の宣言ということと解釈してよろしいですか?回答されている中には、変数の有無を述べた方もいるようですから。

1960ken様は、もう、かなりVBAは、経験されている方のはずですから、「変数の型の宣言」の必要性を考えるのは、上達してきた証拠でしょうね。私も、少し考え直してみました。僭越かもしれませんが、1960ken様のVBAに対するアプローチの仕方に少し問題があるかもしれません。

最初に、「変数宣言を強制(Option Explicit)」は、コーディングの際に入力ミス...続きを読む

Q関数 空白の表記方法

=SUMIF(A2:A25,○,B2:B25)
○のところを空白のセルという意味にして、合計を出したいと考えています。空白のセルを表す記号のようなものはあるのでしょうか?よろしくお願いします。

Aベストアンサー

空白というのが、全く何もないセルというなら、
=SUMIF(A2:A25,"",B2:B25)で大丈夫ですよ。

半角空白、全角空白も入っている可能性があるとかなら関数が必要になります。

Qメモ型フィールドの文字列の置換と改行の入れ方について

メモ型データ内にあるデータの中から、ある特定の文字を検索して、それを所定の文字に置換すると共に、改行をするという処理をフォームのコマンドボタンのクリックイベントに割り当てたいのですが、どのようにすればよいでしょうか?
 具体的にいうと、1のデータを、2のデータに置き換えたいということです。
 1.30 米,麦;40 ビデオ,テレビ
 2.【30】 米,麦
   【40】 ビデオ,テレビ

Aベストアンサー

非連結のテキストボックス<テキスト0>に元の文があれば、コマンドボタン<コマンド2>で<テキスト0>を書き換えます。

質問の改行の位置らしき『;』や数字と文字を分けるスペースが全角か半角かはっきりしないので、下記では最初に半角に置き換えて判定しています。参考にして下さい。理屈では何行にでもなります。

Private Sub コマンド2_Click()
  Dim moji As String
  Dim potLF As Integer '改行を行う文字の位置
  Dim potSpc As Integer '数字と文字の区分け位置
  Dim elm As String '1行分の文字
  Dim mojiWork As String 'ワーク変数

  moji = テキスト0
  moji = Replace(moji, ";", ";", , , vbTextCompare)
  moji = moji & ";"
  potLF = InStr(moji, ";")
  While potLF > 0
    elm = Left(moji, potLF - 1)
    potSpc = InStr(Replace(elm, " ", " ", , , vbTextCompare), " ")
    '文字の整形
    elm = "【" & Left(elm, potSpc - 1) & "】 " & Right(elm, Len(elm) - potSpc)
    mojiWork = mojiWork & elm & vbCrLf

    moji = Right(moji, Len(moji) - potLF)
    potLF = InStr(moji, ";")
  Wend
  テキスト0 = Left(mojiWork, Len(mojiWork) - 2)
End Sub

非連結のテキストボックス<テキスト0>に元の文があれば、コマンドボタン<コマンド2>で<テキスト0>を書き換えます。

質問の改行の位置らしき『;』や数字と文字を分けるスペースが全角か半角かはっきりしないので、下記では最初に半角に置き換えて判定しています。参考にして下さい。理屈では何行にでもなります。

Private Sub コマンド2_Click()
  Dim moji As String
  Dim potLF As Integer '改行を行う文字の位置
  Dim potSpc As Integer '数字と文字の区分け位置
  ...続きを読む

QWord ○(まる)で表示される空白

海外で作成されたWord文書を
日本語のWordで開くと、文章中の空白に○で空白が表示されている場合があります。
(厳密に言うと、○を上付文字にしたような感じで、普通の空白よりも幅がせまいです)

編集記号をすべて表示させている状態で、Shift+Ctrl+スペースキーで、その○空白が打つことができるようで、
印刷には表示されないのでそのままにしておいてもよいのですが
この○空白はどのような意味をもっているのでしょうか?

ご存じの方、よろしければ教えてください。

環境
・Windows XP Professional
・Office XP (Word2002)
 編集記号はすべて表示するようにしてあります。

Aベストアンサー

>Shift+Ctrl+スペースキー
「改行させないための空白」です。

たとえば文末で「micorosft word」と入力すると、microsoftのあと自動で行送りされて、次の行にwordと表示されることがあります。
それをさせたくないときに、Shift+Ctrl+スペースキーで空白を挿入すると、2行にわかれることを防げます。

QAccess メッセージボックスで文字列と変数を

メッセージボックスについての質問です。

MsgBox "データ数を表示します”
とすればメッセージボックスで「データ数を表示します」と表示されますね。

変数kazuの値が100とします。
MsgBox kazu
とすればメッセージボックスで「100」が表示されます。

それでは 文字列の「データ数を表示します」と 変数の「100」が一緒に表示されるメッセージボックスは出来ないものですか?

Aベストアンサー

MsgBox "データ数を表示します” & vbCrLf & kazu
これでどうですか?


人気Q&Aランキング

おすすめ情報