質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

7537閲覧

エクセルVBA アクティブセルをコピーしたいが値のみしか反映されない

rainbow_trip

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/05/10 02:29

編集2017/05/10 02:31
Sub コピペボタン() Dim 検索セル, 検索セル内容, 結果, 検索社番 As Variant Range("P8") = "" '過去の社番をクリアにする 検索セル = ActiveCell.Address() If 検索セル = "" Then MsgBox "対象セルを選択して下さい" Exit Sub End If Set 検索セル内容 = Range(検索セル) 検索社番 = (Left(検索セル内容, 5)) '後ろ5ケタ社番 Range("P8").Value = 検索社番 'P8セルに社番表示 結果 = Range("P10").Value 'P8セル社番を検索値としてVLOOKUPにて結果表示 Dim 対象セル As Range Dim 対象セル内容, 対象セル番号 As Variant On Error GoTo myError Set 対象セル = Application.InputBox("移動先セルを選択してください", 結果, Type:=8) 対象セル = 検索セル内容 '検索セルの内容を移動先に貼付 Range(検索セル).Clear Exit Sub myError: End Sub

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

アクティブセル(選択したセル)をコピーして、
imputboxで移動先セルをクリックしてもらうとコピペされるが
文字だけで、書式(色)も一緒にコピーしたいが、
どのようなコードが必要でしょうか?

エラーメッセージ

###該当のソースコード

対象セル = 検索セル内容 '検索セルの内容を移動先に貼付

###試したこと
ActiveCell = 対象セル
対象セル番号 = ActiveCell.Address

①これはオブジェクトが見つからないエラーが出てしまいます
'Range(検索セル).Select
'Selection.Copy destinetion:=Range(対象セル)
'Range(対象セル).Select

②これは検索セルがクリアになってしまいます
Range(検索セル).Copy
Range(対象セル番号).PasteSpecial Paste:=xlPasteAll

課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

imputboxで移動先セルをクリックしてもらうとコピペされるが
文字だけで、書式(色)も一緒にコピーしたいが、
どのようなコードが必要でしょうか?

対象セル = 検索セル内容 '検索セルの内容を移動先に貼付

の部分を、

検索セル内容.Copy 対象セル '検索セルの内容を移動先に貼付

に書き換えるだけです。

コードの書き方でいろいろ指摘したいところはありますが、とりあえず質問だけに回答です。

追記

前の回答者さんと内容がかぶってしまったので、
指摘したいところを追記しておきます。

不必要な変数宣言、不適切な型指定
変数名も紛らわしい
移動なら、copyではなく cutメソッドを使えば1行で済む
など、
これらを考慮したコード例

Sub コピペボタン() Dim 検索セル As Range Dim 対象セル As Range Dim 結果 As Variant, 検索社番 As Variant Range("P8") = "" '過去の社番をクリアにする Set 検索セル = ActiveCell If 検索セル.Value = "" Then MsgBox "対象セルを選択して下さい" Exit Sub End If 検索社番 = (Left(検索セル.Value, 5)) '後ろ5ケタ社番 Range("P8").Value = 検索社番 'P8セルに社番表示 結果 = Range("P10").Value 'P8セル社番を検索値としてVLOOKUPにて結果表示 On Error GoTo myError Set 対象セル = Application.InputBox("移動先セルを選択してください", 結果, Type:=8) 検索セル.Cut 対象セル '検索セルの内容を対象セルに移動 Exit Sub myError: MsgBox "実行時エラー" & Err.Number & ":" & vbCrLf & Err.Description End Sub

投稿2017/05/10 02:56

編集2017/05/10 03:14
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainbow_trip

2017/05/10 04:20

ご丁寧にコード例のご入力ありがとうございます とてもスッキリまとまって、感激しています こんなふうにスリムにコードが作れるよう、もっと励みたいと思います イメージとおり、バッチリ作動しました ありがとうございました
guest

0

こうでしょうかね。

VBA

1対象セル = 検索セル内容 '検索セルの内容を移動先に貼付 23Range(検索セル).Copy 対象セル

投稿2017/05/10 02:50

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainbow_trip

2017/05/10 04:21

早速ありがとうございました この方法でスムーズにできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問