- ベストアンサー
メモ帳に表をコピーする
エクセルで下のような簡単な表を作ったのですが、 1 XXXXXXXX AA 2 XXXX BBB 3 XXXXXX C これをメモ帳にコピーすると、こんな風に間が詰まってしまいます 1 ああああ AA 2 いい BBB 3 ううう C 手動でスペースを入れて上の方の表っぽくしたのですが、これを自動でやる方法は無いでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
http://cgi.fuji.ne.jp/~fj2094/cgi-bin5/exqalounge.cgi?print+200706/07060012.txt ありましたがマクロなのでちょっと手間かもしれません。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
#5 の回答者です。 >教えてくださったマクロはNO.2の方のリンク先のマクロと同じ使い方でいいのでしょうか? 同じオブジェクトを使っています。そのコード自体では、強制終了するような問題はないはずですが、オブジェクト自身か、システム上のトラブルがあるのか、クリップボードに異物が入るのかだと思います。そういう場合は、あえて継続的にお使いになることをお勧めしません。 他にクリップボードから取り出す方法もあるのですが、不明な理由のまま、書き換えることはできませんし、特別な間違いは見出せませんので、それを直す予定はありません。NO.2さんが紹介されたマクロ自体の内容には訂正の余地を感じたから書いたまでです。残ったマクロは、削除した後、参照設定も外したほうが無難です。 なお、私個人は、テキスト・エディタを使って、tab コードをスペース2か4つに変換するか、大掛かりの場合は、Excelの保存の際に、テキスト・スペース区切り(*.PRN)で保存するか、どちらかだと思います。
お礼
強制終了する原因は分かりませんでした・・・ 既に希望通りに出来る回答をいただいていますので、このマクロは使わないでおきます。 ありがとうございました。
[回答番号:No.4この回答へのお礼]へのコメント、 》 1行目と2行目で2つめのセルの内容がズレて表示された フォントの種類を固定長フォント(例えば、MS ゴシック、MS 明朝)に設定してみてください。MS Pゴシック、MS P明朝等の「P」が付いたフォントはプロポーショナル(Proportional)フォントで「ズレて表示」されます。
お礼
何度もありがとうございます、今度はちゃんと出来ました! フォントで表示幅が違うんですね、知りませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 関数でも可能ではあるけれども、実際は、2列でもないでしょうし、セル幅と文字列の長さの比較とか考えると複雑化はやむをえないような思います。 #2番様のリンク先のマクロの内容ですが、たぶん、作者ご本人も、今では同じようなマクロは書いていないとは思います。ワークシート関数に対応するVBA関数が良く分かっていらっしゃらないようです。違うものは、LENB,REPTとかは、 結果オーライではあるけれども、もう少し、VBAらしくする必要がありそうな気がします。 以下は、特に、上記のマクロを参考にはしておりません。どうも、こちらの作ったものは、良いと思った方法が、原因の分からないバグが存在しているので、内部で修正しなくてはなりませんでした。以下のマクロも結果オーライです。 '標準モジュール Sub Spacehold() '参照設定--Microsoft Forms 2.0 Object Library 'または、UserForm を一回作って、削除すると、参照設定される。 Dim objData As New DataObject Dim buf0 As String Dim buf As String Dim buf1 As Variant Dim buf2 As Variant Dim buf3 As String Dim s1 As Variant Dim i As Integer, j As Integer, k As Integer, m As Integer Dim n As Integer 'スペースの広さ With objData .Clear If TypeName(Selection) <> "Range" Then Exit Sub Else Selection.Copy End If n = Int(ActiveCell.ColumnWidth) 'セル幅 .GetFromClipboard buf0 = .GetText() buf1 = Split(buf0, vbCr) buf3 = "" For Each s1 In buf1 buf2 = Split(s1, vbTab) For i = LBound(buf2) To UBound(buf2) j = LenB(StrConv(Trim(buf2(i)), vbFromUnicode)) If n - j < 0 Then k = 2 Else k = n - j End If If i < UBound(buf2) Then buf3 = buf3 & Trim(buf2(i)) & Space(k + m - 1) Else buf3 = buf3 & Trim(buf2(i)) End If m = 1 '補正 Next buf = buf & vbCr & buf3 buf3 = "" Next s1 .SetText Mid(buf, 2) .PutInClipboard End With Beep End Sub
お礼
回答ありがとうございます。 教えてくださったマクロはNO.2の方のリンク先のマクロと同じ使い方でいいのでしょうか? 試してみたところ、何度やってもエクセルが強制終了してしまいます・・・
[回答番号:No.3この回答へのお礼]へのコメント、 》 どう弄っても綺麗な表になりませんでした どう弄っても?例えばどう弄ったのですか? 貴方が言う「綺麗な表」とはどんなものですか? メモ帳上で“固定長テキスト”(「簡単な表」)になることではなかったのですか?
お礼
再度ありがとうございます。 >>ヒントだけ ということだったのでこのまま使うのでは無いのかと思ったのですが、違ったのでしょうか? この関数をそのままコピーして使ったところ、1行目と2行目で2つめのセルの内容がズレて表示されたので、関数の中の参照するセルを変えてみたりしたのですが・・・
ヒントだけネ(^_^) =A1&REPT(" ",CELL("width",A1)-LENB(A1))&B1
お礼
回答ありがとうございます。 すみません、全然分かりませんorz A1とB1の内容がスペースを空けて同じセルに表示されることは分かったのですが、どう弄っても綺麗な表になりませんでした
- Syleena
- ベストアンサー率39% (385/974)
Excelから保存される時にファイルの種類をテキスト(タブ区切り)に してみてはいかがですか?
お礼
回答ありがとうございます。 やってみましたが、やはり間が詰まった状態になってしまいました。
お礼
回答ありがとうございます。 マクロを使ったことが無かったので大分手間取りましたが、なんとか出来ました!