プロが教えるわが家の防犯対策術!

仕事で社内のシステムから売上の情報をコピーしてエクセルに貼り付けて処理をしようとしたところ、コピーした数字に「桁区切りのカンマ","」がある関係で、
たとえば 1,234,567 という数字が
1 と 234 と 567 とセルが分割されて貼り付けられてしまいます。
CSVファイルのカンマ区切りデータと同じように情報がカンマで分割されてしまっているようなのですが、貼り付けの際に分割されないようにするにはどうしたらよいでしょうか?

ちなみに、これらデータはスペースで区切られているので一度テキストファイルに保存して、CSVを開くときの区切り文字の設定を「スペース」に設定すればうまく開くのはわかるのですが、コピーして即貼り付けのときにこのようになることを回避する方法はあるのでしょうか?マクロを組んでも構いません。

どうぞ、ご教授、宜しくお願いします。

A 回答 (5件)

Excel2000の場合ですが


メニューの「データ」→「区切り位置」の設定によって
貼り付けるデータが分解される場合があります。
区切りコードにカンマが指定されているのではないでしょうか?

この回答への補足

回答ありがとうございます。
確かにこの方法で区切り位置の変更を行ってから貼り付けることによって、カンマでのセル分割はなくなりました。ありがとうございます。
ただ、なんでこのようなことが発生してしまうのか原因がわかれば、今後の対応も可能なのですが・・・。

ただ、解決策にはなりそうです。

補足日時:2006/06/07 17:50
    • good
    • 2
この回答へのお礼

今回はありがとうございました。
原因もわかりました。
まず、他のエクセルマクロを起動した跡にこの現象が起きていたのですが、このマクロの中に、テキストファイルをカンマ区切りで開くようなプログラムがあり、この作業が終わっても、そのシートを閉じても、エクセルが起動されつづけていれば、その”,”カンマ区切りのシート設定が有効になったままになるということが判明しました。
したがって、今回の現象はそういった処理をした後に、カンマの桁区切りを含んだ数字(文字列)をペーストしたから、このようになってしまったということです。
ですので、テキストファイルをカンマ区切りで開くマクロの中に終了時に、デフォルトの状態に戻すようなマクロを組んでおけば影響がないということになりそうです。

エクセルの桁区切りの機能は始めて知ったので、非常に勉強になりました。ありがとうございました。

お礼日時:2006/06/08 19:12

こんにちは。

始めに長文すみません。

本件は HTML は全く関係ないみたいです。忘れて下さい。混乱させてすみません
でした。Hayashi_Trek さん、勉強になりました^^

もう解決かもしれませんが、ちょっと違う視点から VBA コードを書いてみました
ので、良かったらお試し下さい。コードの概略は、

  1. クリップボードの文字列を読み込み
  2. 1.の文字列のうち、数字桁区切りのカンマを置換で削除
  3. クリップボードへ加工済みの文字列を転送
  4. ペースト

です。

Auto_Open を実行すると、次の独自ショートカットキーにマクロを割り当てます。

  ・[Ctrl]+[Shift]+[V]

メニューから PasteClipBoardData を実行するか、このショートカットキーで
桁区切りカンマが削除されたデータがペーストされます。

余談ですが、今回のクリップボード操作は、

  ・半角カナは全角カナに置換されてペースト
  ・英数字は全て半角に置換されてペースト
  ・特定の文字が追加されてペースト

など色々と応用ができそうです。アドインにしても面白いかもしれません。(^^)

使い方ですが、諸事情で参照設定が必要です。VBE の [ツール]-[参照設定] で
以下のものをチェックしてから、標準モジュールにコピペして下さい。

・参照設定: Microsoft Forms 2.0 Object Library
・参照設定: Microsoft VBScript Regular Expressions x.x

では。

’--------- 以下コード(標準モジュール) --------------------------

Option Explicit

Sub Auto_Open()
  '独自ショートカットキー割当
  Application.OnKey "+^v", "PasteClipBoardData" '[Ctrl]+[Shift]+[V]
End Sub

Sub Auto_Close()
  '独自ショートカットキー割当解除
  Application.OnKey "+^v"
End Sub

Sub PasteClipBoardData()

  Dim strText As String
  On Error GoTo ERROR_HANDLER
  ' クリップボードのテキストを取得してみる
  strText = CB_GetText()
  ' strText が vbNullString でなければ
  If strText <> vbNullString Then
    ' 加工して再度 ClipBoard に転送
    strText = DropOutComma(strText)
    strText = Trim$(strText)
    Call CB_SetText(strText)
  End If
  ' ペースト
  ActiveSheet.Paste
  Exit Sub

ERROR_HANDLER:
  MsgBox "Error(" & Err.Number & ")" & vbCrLf _
      & Err.Description, vbCritical

End Sub

Private Function DropOutComma(ByVal strText As String) As String
  
  '-----------------------------------------------------------------
  ' @Description: 対象文字列から数値桁区切りのカンマを削除する
  ' @Param   : strText 対象文字列
  ' @Return   : String
  '-----------------------------------------------------------------

  ' 参照設定: Microsoft VBScript Regular Expressions x.x
  
  Dim RE As RegExp
  Dim MC As MatchCollection
  Dim M  As Match
  
  On Error GoTo ERROR_HANDLER
  Set RE = New RegExp
  With RE
    .Pattern = ",(\d{3,})" '<-- 検索後のマッチングパターン
    .IgnoreCase = False
    .Global = True
  End With
  Set MC = RE.Execute(strText)
  If MC.Count > 0 Then
    For Each M In MC
      'ここで置換してます
      strText = Replace(strText, M.Value, M.SubMatches.Item(0))
    Next M
  End If
  DropOutComma = strText
  Set MC = Nothing
  Set RE = Nothing
  Exit Function
  
ERROR_HANDLER:
  Err.Raise Err.Number, Err.Source, Err.Description

End Function

Private Function CB_GetText() As String

  '-----------------------------------------------------------------
  ' @Description: クリップボードの文字列を取得する (DataObject経由)
  ' @Return   : String
  '-----------------------------------------------------------------

  '参照設定: Microsoft Forms 2.0 Object Library

  Dim CB   As DataObject
  Dim strText As String

  Const TEXT_FORMAT = 1&

  On Error GoTo ERROR_HANDLER
  Set CB = New DataObject
  With CB
    .GetFromClipboard
    If .GetFormat(TEXT_FORMAT) Then
      strText = .GetText
    Else
      strText = vbNullString
    End If
  End With
  Set CB = Nothing
  CB_GetText = strText
  Exit Function

ERROR_HANDLER:
  Err.Raise Err.Number, Err.Source, Err.Description

End Function

Private Function CB_SetText(ByVal strText As String) As Boolean

  '-----------------------------------------------------------------
  ' @Description: クリップボードに対象文字列を転送する (DataObject経由)
  ' @Param   : strText 対象文字列
  ' @Return   : Boolean 成功 True/失敗 False
  '-----------------------------------------------------------------

  '参照設定: Microsoft Forms 2.0 Object Library

  Dim CB   As DataObject

  Const TEXT_FORMAT = 1&

  On Error GoTo ERROR_HANDLER
  If strText <> vbNullString Then
    Set CB = New DataObject
    With CB
      .Clear
      ' DataObject にテキストを転送
      .SetText strText, TEXT_FORMAT
      ' DataObject からクリップボードへ転送
      .PutInClipboard
    End With
    Set CB = Nothing
    CB_SetText = True
  End If
  Exit Function

ERROR_HANDLER:
  Err.Raise Err.Number, Err.Source, Err.Description

End Function
    • good
    • 0
この回答へのお礼

何度も回答いただきありがとうございます。
それにこれだけのマクロをわざわざ組んでいただいて本当にいろいろとありがとうございます。
私にはここまでのマクロを組むだけの力がありませんが、色々と勉強になりました。
ありがとうございました。

お礼日時:2006/06/08 19:40

ああ、、社内システムってのは ブラウザ上で稼動しているものですか?



数字の間に タブコードが入ってるのだとか、スタイルシート絡みの影響
ではないかと思いますが、現状ではイマイチ確信をもてません。

ブラウザ上で右クリックし、「ソースの表示」でその問題の数字部分の
HTMLソースを補足して下さい。

この回答への補足

確かにプラウザ上(エクスプローラー)で稼動していますが、HTMLで表示されているのではなく、なんていうんでしょう?これ?
バックが黒い画面に緑色の文字で表示されているのです。DOSでしょうか?ウインドウズでODSのコマンドラインを使う画面に似ています。これでもHTMLなのでしょうか?ツールバーなどが表示されないので、ソースの表示も出来ません。
プラウザ上とは言わないのでしょうか?

補足日時:2006/06/07 18:06
    • good
    • 0

私も再現できないです。



ただ、セルをダブルクリックして編集モードにしてからペーストするか、数式バーにペーストすれば解決する気はします。

この回答への補足

ありがとうございます。
確かにそういった方法もありますね。
ただ、残念ながらコピーしたデータは複数有り、一度に大量のセルに貼り付けたいのです。ひとつひとつでは対応が出来ないのです。
残念です。

補足日時:2006/06/07 12:06
    • good
    • 0

1,234,567が


どのような書式になっているかわかりませんが、
普通に1,234,567 と入れてコピーしたけど問題は
なかったです。
一応、貼り付けする時に、右クリック→形式を指定して
貼り付け→値と数値の書式でできませんか?

この回答への補足

早速の回答ありがとうございます。
形式を選択して貼り付けをしようと思ったのですが、選択できる形式が「Unicodeテキスト」と「テキスト」しか出てこなく、いわゆる書式や値、数式などを選択できません。
ao777さんがおっしゃるとおり、メモ帳に自分でキーボードを使って1,234,567と打ってからコピーするとちゃんと一つのセルに収まりますねぇ・・・。
なにか違いがあるのか確認してみます。

補足日時:2006/06/07 11:58
    • good
    • 1

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