No.1
- 回答日時:
こんにちは
可能です。
変数の値を、xlPasteValuesやxlPasteAllにしておけば、その内容に従って処理されます。
エクセルの定数名の代わりに、直接数値で指定しても可能です。
https://msdn.microsoft.com/ja-jp/vba/excel-vba/a …
ありがとうございます。
直接数字を指定するようにしたらうまくいきました。
でも文字にした場合は、「実行時エラー'1004' Range クラスの PasteSpecial メソッドが失敗しました。」となってしまいます。
変数の定義はAs Variant でも As Stringでもダメでした。
数値対応で目的は達成しましたが、文字でもできるようにしたいです。
No.2
- 回答日時:
No1です
>変数の定義はAs Variant でも As Stringでもダメでした。
どのような指定方法でなさったのかわかりませんが、何か勘違いしていませんか?
Variantはともかくとして(エクセルが変換してくれるので)、最終的には数値で指定しているのですから、Stringはないでしょう。
XlPasteTypeの列挙型の定数は「定数」です。
Const hoge As Long = 50
で設定した、変数hogeとほぼ同様です。
もしかして、定数名を文字列として変数に代入していたりしませんか?
ご指摘ありがとうございます。
勘違いではありません。そもそも分かってないのです(汗)
見よう見まねでトライして、うまく行ったら結果オーライという感じでお恥ずかしい限りです。
↓とりあえずこの宣言で、「-4163」を入れてちゃんと動作しました。
Dim PasteType As Variant
教えて欲しいのは、変数「PasteType」に「xlPasteValues」を代入して、
Range("E1").PasteSpecial Paste:=PasteType でエラーが起きないためにはどうしたらよいか?なんです。
No.3
- 回答日時:
>↓とりあえずこの宣言で、「-4163」を入れてちゃんと動作しました。
>Dim PasteType As Variant
>教えて欲しいのは、変数「PasteType」に「xlPasteValues」を代入して、
>Range("E1").PasteSpecial Paste:=PasteType でエラーが起きないためにはどうしたらよいか?なんです。
Dim PasteType As Variant
PasteType = xlPasteValues
Range("E1").PasteSpecial Paste:=PasteType
なら、OKです。
PasteType = "xlPasteValues"
Range("E1").PasteSpecial Paste:=PasteType
とすると、エラーになります。
尚、
Dim PasteType As String
PasteType = xlPasteValues
Range("E1").PasteSpecial Paste:=PasteType
とすると、
PasteTypeは文字型なので、"-4163" の文字列になります。
そもそも、Paste:=に代入できるのは数値のみですから、これはエラーになります。
Variant型は数値も文字列も柔軟に格納できるので
PasteType = xlPasteValues とすると、-4163(数値が格納される)になります。
PasteType = ”xlPasteValues” とすると、 ”xlPasteValues” という文字列が格納されます。
ありがとうございます!
実は、あるセル内に「xlPasteValues」または「xlPasteAll」のいずれかが入力されており、
そのセルの値に応じて結果を可変したいのです。
可能でしょうか?
No.4
- 回答日時:
>実は、あるセル内に「xlPasteValues」または「xlPasteAll」のいずれかが入力されており、
>そのセルの値に応じて結果を可変したいのです。
>可能でしょうか?
可能ですが、それは、どのように格納されていますか。
①-4163または-4104の数値が格納されている。
②"-4163"または"-4104"の文字が格納されている。
③”xlPasteValues”または”xlPasteAll”の文字が格納されている。
上記の何れになりますか。それにより、対処方法も異なります。
No.5ベストアンサー
- 回答日時:
③の場合です。
セルA1に「xlPasteValues」または「xlPasteAll」のいずれかが格納されている場合です。(他の文字は格納されていない前提)Dim PasteType As Long
If Range("A1").Value = "xlPasteValues" Then
PasteType = xlPasteValues
Else
PasteType = xlPasteAll
End If
Range("E1").PasteSpecial Paste:=PasteType
とします。
②の場合です。セルA1に"-4163"または"-4104"の文字が格納されている場合です。
Dim PasteType As Long
PasteType = CLng(Range("A1").Value)
Range("E1").PasteSpecial Paste:=PasteType
とします。
No.7
- 回答日時:
自分ではまず絶対にこんなことはやりませんが、
こんなことも出来ないことはない、という例です。
Private Sub test1()
Dim colPasteType As New Collection
Dim PasteType As String
With colPasteType
.Add xlPasteAll, "xlPasteAll"
.Add xlPasteFormats, "xlPasteFormats"
.Add xlPasteValues, "xlPasteValues"
' ・・・
End With
PasteType = Range("A1")
Range("E1").PasteSpecial Paste:=colPasteType(PasteType)
End Sub
No.8
- 回答日時:
こんにちは。
Const xlPasteValues などは、組み込み定数というのですが、それを変えることは、絶対にありえないというか、組み込み定数に手を付けてはいけないと言われますが、仕組みだけは、基本的なことですから、理解しておいたほうがいいです。
そうしないと、少し応用するようになると、ユーザー定義の定数が必要になります。それを知らないと可読性がひどく低くなってしまいます。数値を引数にする書き方は、極力避けるというのが、コーディング・ルールです。それから、Custom Property やCOMアドインを利用する方法もあります。
組み込み定数自体が分かりにくいし長いという場合は、ユーザー定義の定数として、
Const 全部 As Long = &HEFF8
Const 罫線抜き As Long = &H7
Const 結合条件書式付き As Long = &HE
Const テーマ利用 As Long = &HD
Const セル幅月 As Long = &H8
Const コメント As Long = &HEFD0
Const 書式 As Long = &HEFE6
Const 数式 As Long = &HEFE5
Const 数式値書式付き As Long = &HB
Const 入力規則 As Long = &H6
Const 値のみ As Long = &HEFBD
Const 値と数値 As Long = &HC
(注意:正確になっているのか確認していません)
ただし、2byte 文字のコーディングへの利用は、極力控えるべきです。特に、フリガナのない漢字は使ってはいけないと言われます。
ユーザー定義の定数の使い方は、このようにして、標準モジュールのプロシージャー外に書いてあげます。Public キーワードを付けてもよいです。
部分的なら、Private キーワードも良いし、プロシージャ内に書いてもよいです。
利用例:
With Worksheets("Sheet1")
Set Rng = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
End With
Rng.Copy
Worksheets("Sheet2").Range("A1").PasteSpecial 書式
組み込み定数は、予め、このようにして、xlPasteTypeのクラスになっているものだと思います。気をつけなくてはいけないのは、既存の定数を始め、プロパティやメソッドの名称の上書きは通例トラブルのもとですから、してはいけません。
時々、value や str, time などを変数などに使ってしまう人がいますが、基礎的なミスにつながります。
以上です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセルVBA 3 2022/06/09 08:04
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) コピーしたデータを表中で収まるように2列に分けて貼り付けする方法を教えてください。 8 2022/06/24 14:28
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) 送付元、送付先が同じ大きさの複合セルのコピーがVBAで、できません。 1 2023/06/01 20:51
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
EXCELで変数をペーストしたい
その他(プログラミング・Web制作)
-
EXCEL/VBA 変数の値をクリップボードにコピーする方法
Visual Basic(VBA)
-
VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗
Access(アクセス)
-
-
4
【VBA】コピー&複数個所のペースト繰り返し
Excel(エクセル)
-
5
マクロで貼り付け位置を可変させる方法が知りたいです。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
Excelで空白セル直前のセルデー...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
関数の引数でrangeを指定したとき
-
マクロのコマンドボタンの位置...
-
エクセルVBA ダブルクリックし...
-
VBA 複数条件の分岐処理の上手...
-
VBA 重複文字列 色付け
-
Excel VBA でFunctionプロシジ...
-
【VBA】写真の貼り付けコードが...
-
DataGridViewでグリッド内に線...
-
VBAでユーザーフォームにセル値...
-
EXCEL 2010 VBAでピボットで複...
-
マクロ初心者です。 マクロで範...
-
Excel VBAでCheckboxの名前を変...
-
VBA:日付を配列に入れ別セルに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報