Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1378 / 13646 ツリー ←次へ | 前へ→

【74831】テキストファイルから貼り付けた結果が違う 3891 13/9/23(月) 9:03 質問[未読]
【74832】Re:テキストファイルから貼り付けた結果が... kanabun 13/9/23(月) 12:54 発言[未読]
【74833】Re:テキストファイルから貼り付けた結果が... 3891 13/9/23(月) 14:53 発言[未読]
【74834】Re:テキストファイルから貼り付けた結果が... kanabun 13/9/23(月) 14:58 発言[未読]
【74835】Re:テキストファイルから貼り付けた結果が... 3891 13/9/23(月) 16:55 お礼[未読]

【74831】テキストファイルから貼り付けた結果が違...
質問  3891  - 13/9/23(月) 9:03 -

引用なし
パスワード
   テキストファイルの内容を、クリップボードにコピーして、
ブックに貼り付けるという作業をします。


国語 = 80
英語 = 90
数学 = 70

上の3行を貼り付けたときに、最初は、

A1="国語" A2= "=" A3="80"
のように、1行の内容が、スペースで区切られて、
別々のセルに貼り付けられました。

その後、クリップボードが空のときのエラーを回避するために、

  Dim CB As Variant, i As Long
  CB = Application.ClipboardFormats
  If CB(1) = True Then
  MsgBox "クリップボードに何も入っていません"
  End If

という記述を追加したら、
A1="国語 = 80"

のように、1つのセルに、1行の内容が貼り付けられるようになってしまいました。

どちらの結果でも、かまわないのですが、後の処理の都合で、
必ず同じ貼付結果になるようにしたいのですが、
どのようにしたら良いでしょうか。

よろしくお願いいたします

【74832】Re:テキストファイルから貼り付けた結果...
発言  kanabun  - 13/9/23(月) 12:54 -

引用なし
パスワード
   ▼3891 さん:

>国語 = 80

> 最初は、
>
>A1="国語" A2= "=" A3="80"
>のように、1行の内容が、スペースで区切られて、
>別々のセルに貼り付けられました。

直前に、「区切り位置」または「外部データの取り込み-テキストファイルの
インポート」メニューなどでテキストファイルウィザードを使われていて、
そのとき、区切り記号を「スペース」に指定していたから、その区切り記号の
設定がそのまま使われて、クリップボードのテキストが スペース区切りで
貼り付いたのでしょう。

Personal.xls の標準モジュールにこんなプロシージャを置いておくと、
区切り記号をデフォルトのTABにリセットすることができます。

Sub 区切りモードのリセット()
 
 With ActiveCell
  If .Text = "" Then
    MsgBox "文字列の入ったセルをアクティブにして実行"
  Else
    .TextToColumns ActiveCell, _
      DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, _
      Tab:=True, _
      Comma:=False, _
      Space:=False, _
      TrailingMinusNumbers:=True, _
      Other:=False
  End If
 End With

End Sub

【74833】Re:テキストファイルから貼り付けた結果...
発言  3891  - 13/9/23(月) 14:53 -

引用なし
パスワード
   ▼kanabun さん:

ありがとうございます
見えてきました。

処理上、貼り付ける先が、新規BOOKになっているので、
ダミーデータを入れたセルを作って、
処理してやろうと、考えています。

後々を考えて、ペーストするときは、毎回、この処理を入れたほうが良さそうです。

【74834】Re:テキストファイルから貼り付けた結果...
発言  kanabun  - 13/9/23(月) 14:58 -

引用なし
パスワード
   国語 = 80
英語 = 90
数学 = 70

というテキストファイルがあるとき、これを(クリップボードに)コピーして
Excelシートの[A1]に値貼り付けしますと、A列にそのまま貼りつきます。

  A列
1 国語 = 80
2 英語 = 90
3 数学 = 70

つぎに、この範囲[A1:A3]を選択して、[データ]-[区切り位置]機能で
 (1/3)カンマやタブなどの区切り文字によってフィールドごとに区切
   られたデータ
 (2/3)区切り文字 タブのチェックを外し、「スペース」に[レ]を入れる
 (3/3)必要ならば1列目と2列目は文字列を指定
して[OK]すると、こうなります。↓

  A列   B列    C列    
1 国語    =     80
2 英語    =     90
3 数学    =     70

ここまでは 「テキストファイルウィザード」の説明。
つぎに、この状態で 元のテキストを再度クリップボードにコピーして
今度は [A10]セルに貼り付けてみてください。
こうなるはずです。

  A列   B列    C列    
10 国語    =     80
11 英語    =     90
12 数学    =     70

なぜそうなるのかというと、区切り位置やテキストファイルのインポート
作業で用いられるテキストファイルウィザードは「最後に使われた区切り
記号」を覚えているので、クリップボードのテキストを貼り付けるときに
もその最後の区切り記号が使われるのです。

【74835】Re:テキストファイルから貼り付けた結果...
お礼  3891  - 13/9/23(月) 16:55 -

引用なし
パスワード
   ▼kanabun さん:

詳しい説明をありがとうございました。

excelに貼り付ける前のデータが、txtとcsvの場合があり、
csvを読むときに、文字列を編集しなくて良いように、
スペース区切りで読んでいたので、これが、影響していました。

後の処理を考えると、スペース区切りの方が使い易いので、
ルーチンの頭で、
Space:=True
とし、ルーチンの最後で、
Tab:=True
に、戻すようにしました。


※ちなみに、txtとcsvでは、書いてある内容が違って、
txtのほうには、余計なデータが不規則にあります。
なので、txtを開いてしまうと、レイアウトがめちゃめちゃになってしまい、
後から、整形させるのが、あまりにも難しいので、
コピペで貼り付けるようにしています。


ありがとうございました。

1378 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free