回答編集履歴

4

誤りの修正

2021/01/14 02:09

投稿

退会済みユーザー
test CHANGED
@@ -132,8 +132,20 @@
132
132
 
133
133
  ```
134
134
 
135
+ そして追加で調べた結果、下記を質問への追記へ投稿しましたがこちらにも記載します。
135
136
 
136
137
 
137
- また、追記コードも同様の手法で一から順に確認してください。
138
138
 
139
+ すみません
140
+
141
+ 回答を編集した後に追加でこちらでも調べましたが、どうもDataObject自体の不具合の可能性があるようです。
142
+
143
+ https://teratail.com/questions/190985
144
+
139
- 正確な問題把握と適切な質問はなたの期待す回答への到達時間を短くします。
145
+ web上でも同様の報告が多数り、マイクロソフトも認識していようです。
146
+
147
+ WindowsAPIによる代替を提案していますが、私はまだ使用したことがないためお伝えする事が出来ません。
148
+
149
+ こちらのサイトが参考になるかもしれません。
150
+
151
+ https://www.ka-net.org/blog/?p=7537

3

追記への対応

2021/01/14 02:09

投稿

退会済みユーザー
test CHANGED
@@ -77,3 +77,63 @@
77
77
 
78
78
 
79
79
  Excelの挙動に影響されないように変数へデータを逃がせば同様の問題は起こらなくなると思います。
80
+
81
+
82
+
83
+ 【追記】
84
+
85
+ 下記コードを一からステップインで確認して下さい。
86
+
87
+ ローカルウィンドウに変数のデータが表示されるので、変数xの中身は確認できます。
88
+
89
+
90
+
91
+ ```VBA
92
+
93
+ Option Explicit
94
+
95
+
96
+
97
+ Sub main()
98
+
99
+ Dim obj As New Class1
100
+
101
+ With obj
102
+
103
+ .SetClipboard
104
+
105
+ End With
106
+
107
+ End Sub
108
+
109
+
110
+
111
+ 【クラスモジュール作成 クラス名:class1】
112
+
113
+ Public Sub SetClipboard()
114
+
115
+ Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = True
116
+
117
+ Dim x '変数宣言
118
+
119
+ x = Cells(3, 3).Value '値のみ取得
120
+
121
+
122
+
123
+ With New DataObject
124
+
125
+ .SetText x
126
+
127
+ .PutInClipboard
128
+
129
+ End With
130
+
131
+ End Sub
132
+
133
+ ```
134
+
135
+
136
+
137
+ また、追記コードも同様の手法で一から順に確認してください。
138
+
139
+ 正確な問題把握と適切な質問はあなたの期待する回答への到達時間を短くします。

2

誤字の修正

2021/01/14 01:49

投稿

退会済みユーザー
test CHANGED
@@ -21,8 +21,6 @@
21
21
  End Sub
22
22
 
23
23
 
24
-
25
- End Sub
26
24
 
27
25
  Private Sub SetClipboard(ByRef aText As String)
28
26
 

1

データの追記、修正

2021/01/14 00:53

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,8 @@
1
1
  既にDataObjectでの答えが投稿されているため、その他の補足を追加します。
2
2
 
3
+ .Copyではなく.Valudeを使用すれば非表示でも値を取得出来ます。
4
+
3
- 値の保持は変数を用いた方が容易だと思います。
5
+ また値の保持は変数を用いた方が容易だと思います。
4
6
 
5
7
  ```VBA
6
8
 
@@ -8,15 +10,15 @@
8
10
 
9
11
 
10
12
 
11
- Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = False
13
+ Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = True
12
14
 
13
15
  Dim x '変数宣言
14
16
 
15
17
  x = Cells(3, 3).Value '値のみ取得
16
18
 
17
- Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = True
19
+ SetClipboard (x)
18
20
 
19
- SetClipboard (Cells(3, 3).Value)
21
+ End Sub
20
22
 
21
23
 
22
24
 
@@ -42,7 +44,7 @@
42
44
 
43
45
 
44
46
 
45
- またセルの直接的な操作は動作が非常に重いため複数の処理を行った場合、著しく遅くなります。
47
+ セルの直接的な操作は動作が非常に重いため複数の処理を行った場合、著しく遅くなります。
46
48
 
47
49
  配列も使用出来れば良いのですが使わなくても動作します。
48
50
 
@@ -54,13 +56,11 @@
54
56
 
55
57
 
56
58
 
57
- Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = False
59
+ Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = True
58
60
 
59
61
  Dim x '変数宣言
60
62
 
61
63
  x = Range(Cells(1, 1), Cells(3, 3)) 'セル範囲を配列取得
62
-
63
- Range(Cells(3, 3), Cells(3, 3)).EntireColumn.Hidden = True
64
64
 
65
65
  SetClipboard (x(3, 3))'コード内容が変わらないため省略
66
66