Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9952 / 13646 ツリー ←次へ | 前へ→

【24591】シート全体をコピー&ペーストしたい にしもり 05/4/27(水) 20:44 質問[未読]
【24592】Re:シート全体をコピー&ペーストしたい ponpon 05/4/27(水) 20:55 回答[未読]
【24593】Re:シート全体をコピー&ペーストしたい ichinose 05/4/27(水) 21:00 発言[未読]
【24594】Re:シート全体をコピー&ペーストしたい ponpon 05/4/27(水) 21:17 発言[未読]
【24595】Re:シート全体をコピー&ペーストしたい ウッシ 05/4/27(水) 21:32 回答[未読]
【24598】Re:シート全体をコピー&ペーストしたい ichinose 05/4/27(水) 21:48 発言[未読]
【24599】Re:シート全体をコピー&ペーストしたい ponpon 05/4/27(水) 21:52 発言[未読]
【24600】Re:シート全体をコピー&ペーストしたい ウッシ 05/4/27(水) 22:28 回答[未読]
【24601】Re:シート全体をコピー&ペーストしたい ponpon 05/4/27(水) 23:12 発言[未読]
【24614】Re:シート全体をコピー&ペーストしたい にしもり 05/4/28(木) 13:22 お礼[未読]

【24591】シート全体をコピー&ペーストしたい
質問  にしもり  - 05/4/27(水) 20:44 -

引用なし
パスワード
   こんにちは。
市場シェアというシートに式がいくつも入っています。
そのシート全体をコピーして、同じシートに値のみを貼り付けようとしています。
が、ペーストしても、いつまでもブリンクして一向に貼り付けが完了しません。
どこが悪いのか、どなたかアドバイスください。

  Sheets("市場シェア").Select
  Cells.Select
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

【24592】Re:シート全体をコピー&ペーストしたい
回答  ponpon  - 05/4/27(水) 20:55 -

引用なし
パスワード
   こんばんは。
こういうことでしょうか。

Sub test()

Sheets("市場シェア").Cells.Copy
Sheets("コピー").Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

【24593】Re:シート全体をコピー&ペーストしたい
発言  ichinose  - 05/4/27(水) 21:00 -

引用なし
パスワード
   にしもりさん、ponpon さん、こんばんは。
数式を値に置き換えるということなら、数式のセルだけ集めて


'===================================================
Sub main()
  On Error Resume Next
  With Sheets("市場シェア").Cells
   Set rng = .SpecialCells(xlCellTypeFormulas)
   If Err.Number = 0 Then
     rng.Value = rng.Value
     End If
   End With
  On Error GoTo 0
End Sub

としていかがですか?

【24594】Re:シート全体をコピー&ペーストしたい
発言  ponpon  - 05/4/27(水) 21:17 -

引用なし
パスワード
   こんばんは。
勘違いしてました。
>そのシート全体をコピーして、同じシートに値のみを貼り付けようとしています。
と書いてました。(汗)
失礼しました。

【24595】Re:シート全体をコピー&ペーストしたい
回答  ウッシ  - 05/4/27(水) 21:32 -

引用なし
パスワード
   こんばんは、にしもりさん、ponpon さん、ichinoseさん

>Set rng = .SpecialCells(xlCellTypeFormulas)
が飛び飛びのセル範囲の場合、
>rng.Value = rng.Value
はまずくないですか?

Sub test()
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual '不要だと思いますけど一応
  With Sheets("市場シェア").UsedRange
    .Value = .Value
  End With
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub

【24598】Re:シート全体をコピー&ペーストしたい
発言  ichinose  - 05/4/27(水) 21:48 -

引用なし
パスワード
   ▼ウッシ さん、こんばんは。

>
>>Set rng = .SpecialCells(xlCellTypeFormulas)
>が飛び飛びのセル範囲の場合、
>>rng.Value = rng.Value
>はまずくないですか?
あっ、忘れてました。
では、エリアで回します。
ありがとうございます。

Sub main()
  On Error Resume Next
  With ActiveSheet.Cells
   Set rng = .SpecialCells(xlCellTypeFormulas)
   If Err.Number = 0 Then
     For Each c_area In rng.Areas
      c_area.Value = c_area.Value
      Next
     End If
   End With
  On Error GoTo 0
End Sub

【24599】Re:シート全体をコピー&ペーストしたい
発言  ponpon  - 05/4/27(水) 21:52 -

引用なし
パスワード
   こんばんは。ウッシさん。
確かに飛び飛びの場合、
>SpecialCells(xlCellTypeFormulas)
では
エラーがでます。
>UsedRange
では、うまくいきます。
>同じシートに
ということで、私も SpecialCells(xlCellTypeFormulas)を
考えました。
どうしてなんでしょう?
よかったら教えてください。

【24600】Re:シート全体をコピー&ペーストしたい
回答  ウッシ  - 05/4/27(水) 22:28 -

引用なし
パスワード
   こんばんは

うまく説明出来ませんけど、「Range」が複数セルの場合「Value」は配列を返しますが
配列自体に離れた要素という概念は無いので、
飛び飛びのセルの場合は最初のセル(セル範囲)しか返さないです。

いい例ではないですけど、こんな感じです。

Sub test1()
  Dim v
  Range("A1").Value = 1
  Range("C1:D2").Value = Evaluate("{4,3;2,1}")
  
  v = Range("A1,C1:D2").Value
  If Not IsArray(v) Then
    MsgBox v
  Else
    MsgBox "戻り値が配列のためメッセージボックスに表示出来ません。"
  End If

  v = Range("C1:D2,A1").Value
  If Not IsArray(v) Then
    MsgBox v
  Else
    MsgBox "戻り値が配列のためメッセージボックスに表示出来ません。"
  End If
  
  Range("A1,C1:D2").Value = Range("A1,C1:D2").Value
  MsgBox "確認:「A1」に「A1」の値、「C1:D2」に「A1」の値"
  
  Range("A1").Value = 1
  Range("C1:D2").Value = Evaluate("{4,3;2,1}")
  MsgBox "確認:元の値を再セット"
  
  Range("C1:D2,A1").Value = Range("C1:D2,A1").Value
  MsgBox "確認:「C1:D2」に「C1:D2」の値、「A1」に「C1」の値"
  
End Sub

【24601】Re:シート全体をコピー&ペーストしたい
発言  ponpon  - 05/4/27(水) 23:12 -

引用なし
パスワード
   こんばんは。
ありがとうございます。
>「Range」が複数セルの場合「Value」は配列を返しますが
>配列自体に離れた要素という概念は無いので、
>飛び飛びのセルの場合は最初のセル(セル範囲)しか返さないです
test1試してみました。初めのrangeの値しか入力されませんでした。
これで納得です。
>Evaluate("{4,3;2,1}")

でた!!
Evaluate
この間ichinoseさんに
>「指定された文字列式を評価した結果を返します」という風に理解しています。
と教えられて、「ふむふむ」と納得したつもりなのに 全然わからん。
C1に4,D1に3,C2に2,D2に1の値を入力するということは、何となくわかります。
 Evaluateについては、今度また必要なときに質問させていただきます。
ありがとうございました。
にしもり さん 横からごちゃごちゃとすみませんでした

【24614】Re:シート全体をコピー&ペーストしたい
お礼  にしもり  - 05/4/28(木) 13:22 -

引用なし
パスワード
   ▼皆 さん:

ichinoseさんの【24593】でできました。
わたくしには正直歯が立ちません。
結果のみ使わせていただきます。
本当にありがとうございました。

9952 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free