アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルA1~A12のうち、A1~A3およびA8~A12までをコピーして
メモ帳に貼り付けを行うと、コピー範囲に無いA4~A7まで貼り付けられます。
どういう構文にすれば良いのか教えてください。
------
現状
Sub Macro1()

Range("A1:A3,A8:A12").Copy

End Sub

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

「EXCEL VBA 複数セルのコピー」の質問画像

A 回答 (8件)

#3の回答者です。



返事を、ありがとうございました。
>1つ質問があります。
>メモ帳貼り付け時、1行あけて、貼り付けられます。つめることはできますでしょうか

一番上が空いているという意味ですね。それなら、私の計算違いでした。失礼しました。
下から見ていくと、「*この部分」は、CR+LF の2文字が残っているのだから、3になる計算でした。

  .SetText Mid(buf, 3) '訂正
-------------
 With CB
  .SetText Mid(buf, 2)  '←*この部分 3に変更
  .PutInClipboard
 End With
 ret = Shell("NotePad.exe", vbNormalFocus)
 CreateObject("Wscript.Shell").SendKeys "^v", True
 On Error Resume Next
 Set CB = Nothing
End Sub
-------------
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ばっちりです。助かりました。

お礼日時:2017/03/04 02:53

どうしてもコピペしたいなら次のようなものはいかがですか?


--------------------------------------------------------------------
Sub クリップボードセット()
Dim 文章 As String
Dim 範囲 As Long
Dim セル As Long
With Range("A1:A3,A8:A12")
For 範囲 = 1 To .Areas.Count
For セル = 1 To .Areas(範囲).Cells.Count
文章 = 文章 & .Areas(範囲).Cells(セル).Text & Chr$(13) & Chr$(10)
Next
Next
End With
With New MSForms.DataObject
.SetText 文章
.PutInClipboard
End With
End Sub
--------------------------------------------------------------------
※ 「Microsoft Forms 2.0 Object Library」を参照設定しないと下図のようなエラーが出ます。
ただし、参照設定のリストに表示されていないので直接ファイル(FM20.DLL)を指定しないといけないので面倒です。それよりもユーザーフォームを挿入すると自動で参照設定されるのでそちらのほうが簡単です。もちろんユーザーフォームはすぐ解放してしまっても問題ありません。
「EXCEL VBA 複数セルのコピー」の回答画像7
    • good
    • 0
この回答へのお礼

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

お礼日時:2017/03/04 02:54

No.5 の追補



たとえばセルを [Ctrl] キーを押しながら、A12,A11,A10,A9,A8,A3,A2,A1の順にクリックして選択すると順番を逆にすることも出来ます。
同じところを複数回は流石にダメですが、順番は好きに出来ます。
    • good
    • 0

選択した部分を1つのファイルとして保存するものを作ってみました。


-------------------------------------------------------------------------
Sub ファイル作成()
Const ファイル名 As String = "test"
Dim フルパス As Variant
Dim 範囲 As Long
Dim セル As Long
ChDir ThisWorkbook.Path
フルパス = Application.GetSaveAsFilename( _
InitialFileName:=ファイル名, _
Title:="保存ファイルを指定して下さい")
If フルパス = False Then Exit Sub
Open フルパス For Output As #1
For 範囲 = 1 To Selection.Areas.Count
For セル = 1 To Selection.Areas(範囲).Cells.Count
Print #1, Selection.Areas(範囲).Cells(セル).Text
Next
Next
Close #1
End Sub
-------------------------------------------------------------------------
※ よく使うファイル名が有れば「Const ファイル名 As String = "test"
」の「test」を変更して下さい、デフォルトでセットされます。(拡張子をつけても良いです)もちろん実行後変更可能です。
※ よく使うフォルダーが有るならば「ChDir ThisWorkbook.Path」の「ThisWorkbook.Path」の代わりにフルパスで指定して下さい(例:「"C:\○○\△△"」など 今はマクロが書かれているブックが有るフォルダーになっています)もちろん実行後変更可能です。
※ 複数のエリアの選択方法はご存知ですよね。エリア固定の方がよければ「Selection」を「Range("A1:A3,A8:A12")」のようにして下さい。
    • good
    • 0
この回答へのお礼

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

申し訳ありません。ファイル作成は考えておりません。
別ソフト側のファイルロードは1つずつしかできないため
値が変わるごとにファイル作成→ロードでは手間がかかるためです。

お礼日時:2017/03/03 19:01

マウスとCtrlキーで複数の連続していないセル範囲を選択してコピーした場合も同様ですので、


これはExcelの仕様であり正攻法では対処できないということになるかと思います。

検索すると
MSFormsのDataObjectを使ってクリップボードにテキストを転送する
WindowsAPIでクリップボードの内容を直接操作する
等の方法が紹介されていますね。

まあしかし、他のセルやテキストボックスやらにテキストをセットしてから
それをコピーするのが面倒が少ないのではないかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2017/03/03 18:57

こんばんは。



>メモ帳に貼り付けを行うと
どのように貼り付けるかは別としても、VBAそのものは、そのアプリケーションの中でしか管理できませんから、もし、クリップボード経由で、その内容を管理するなら、まったく考え方が違います。今回は、簡単な方法で書いてみました。
コメントブロック(')を外すと、NotePad に貼り付けられますが、NotePad の起動に時間が掛かるようなら、失敗すると思います。

'//
Sub SeparatedAreasCopy()
 Dim buf As Variant
 Dim CB As Object
 Dim c As Variant
 Dim ret As Long
 Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 Set CB = GetObject("new:" & CLSID)
 For Each c In Range("A1:A3,A8:A12").Cells
  buf = buf & vbCrLf & c
 Next c
 With CB
  .SetText Mid(buf, 2)
  .PutInClipboard
 End With
'以下は、メモ帳に貼り付け
' ret = Shell("NotePad.exe", vbNormalFocus)
' CreateObject("Wscript.Shell").SendKeys "^v", True
' On Error Resume Next
 Set CB = Nothing
End Sub

'//
この発想に似たマクロを長年使って、失敗もありませんが、内容は、めちゃめちゃに複雑になっていきます。ファイル名をつけて、テキストにして、それをアプリで読ませるのが一般的です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
まさに、これです。ありがとうございました。

1つ質問があります。
メモ帳貼り付け時、1行あけて、貼り付けられます。つめることはできますでしょうか?

お礼日時:2017/03/03 18:57

もしかしたらバッチファイルみたいなものを作りたいのならば、コピペなどという半分手動などせず、ファイルその物を作成する方が簡単だと思います。

それで良ければパス名、ファイル名や拡張子など教えてください。
    • good
    • 0
この回答へのお礼

>パッチファイル~
すみません。そういうわけではないので。

VBAでは困難なことなんでしょうか?

ちなみに、半分手動な理由としては、変数となる箇所が多すぎて
その都度、パッチ作成、それをロードしていたら大変なためです。

お礼日時:2017/03/02 22:56

次のようなことが割と簡単に出来ると思います。


① 2回に分けてコピーする
② 別のシートに一度貼り付けて、それをコピーする
    • good
    • 0
この回答へのお礼

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

説明が雑で、申し訳ありません。実際にはセルにプログラムコマンド等を入れて
別ソフトに貼り付け、そのコマンドを実行する際に使用します。

したがって、
①の2回に分けてでは、プログラム自体が動かなくなるためできません。
②最終手段としておきたいと思います。貴重な回答ありがとうございます。

お礼日時:2017/03/02 22:26

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