Excel VBA質問箱 IV

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

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


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

【24863】変数として宣言したシート名やファイル名を使って計算 K 05/5/11(水) 23:25 質問[未読]
【24864】Re:変数として宣言したシート名やファイル... ichinose 05/5/12(木) 7:43 発言[未読]
【24869】Re:変数として宣言したシート名やファイル... K 05/5/12(木) 10:08 お礼[未読]
【24886】Re:変数として宣言したシート名やファイル... K 05/5/12(木) 15:33 質問[未読]
【24888】Re:変数として宣言したシート名やファイル... Jaka 05/5/12(木) 16:04 発言[未読]
【24909】ブック全体に対しての置換 K 05/5/13(金) 14:15 質問[未読]
【24913】Re:ブック全体に対しての置換 Jaka 05/5/13(金) 15:08 回答[未読]
【24870】複数の選択範囲に対して値の貼り付けをした... K 05/5/12(木) 10:38 質問[未読]
【24898】Re:複数の選択範囲に対して値の貼り付けを... ichinose 05/5/12(木) 21:19 発言[未読]

【24863】変数として宣言したシート名やファイル名...
質問  K E-MAIL  - 05/5/11(水) 23:25 -

引用なし
パスワード
   変数として宣言したシート名やファイル名を使って作業したいと思っています。

Option Explicit
Const Fund1 As String = "A"
Const Fund1L As String = "A MV(L)"
Const Fund1S As String = "A MV(S)"
Const FileName As String = "Nov2004.xls"


Sub Format()
Worksheets(Fund1).Range("G3").FormulaR1C1 = _
    "= 'A MV(L)'!RC-'A MV(S)'!RC"

Cells.Replace What:="[Nov04.xls]", Replacement:="" _
    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
    :=False, ReplaceFormat:=False
End Sub

宣言した変数を使って上記のコードを書き表すにはどうしたら良いのでしょうか。

【24864】Re:変数として宣言したシート名やファイ...
発言  ichinose  - 05/5/12(木) 7:43 -

引用なし
パスワード
   ▼K さん:
おはようございます。

>変数として宣言したシート名やファイル名を使って作業したいと思っています。
>
>Option Explicit
>Const Fund1 As String = "A"
>Const Fund1L As String = "A MV(L)"
>Const Fund1S As String = "A MV(S)"
>Const FileName As String = "Nov2004.xls"
'揚げ足をとるような話で申し訳ないんですが、
'これは、正確には変数ではなく定数ですよ。
>
>
>Sub Format()
>Worksheets(Fund1).Range("G3").FormulaR1C1 = _
>    "= 'A MV(L)'!RC-'A MV(S)'!RC"
'    "='" & Fund1L & "'!RC-'" & Fund1S & "'!RC"
>
'というように「 & 」を使用して連結していきます。
>
>Cells.Replace What:="[Nov04.xls]", Replacement:="" _
>    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
>    :=False, ReplaceFormat:=False
>End Sub
>
>宣言した変数を使って上記のコードを書き表すにはどうしたら良いのでしょうか。

確認してみて下さい。

【24869】Re:変数として宣言したシート名やファイ...
お礼  K E-MAIL  - 05/5/12(木) 10:08 -

引用なし
パスワード
   ありがとうございました。教えていただいたとおりにやったらできました。

【24870】複数の選択範囲に対して値の貼り付けをし...
質問  K E-MAIL  - 05/5/12(木) 10:38 -

引用なし
パスワード
   コードを書き進めていくうちに別の疑問が生じました。

Option Explicit
Const Fund1 As String = "A"
Const Fund1L As String = "A MV(L)"
Const Fund1S As String = "A MV(S)"
Const FileName As String = "Nov04.xls"


Sub Format()
Worksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12, _
g14:m14,g16:m16,g19:m21,g23:m34,g36:m43,g45:m52, _
g54:m55,g57:m59,g61:m63,g65:m67, _
g69:m71,g73:m74,g76:m76,g78:m79,g82:m83, _
g85:m91,g93:m94").ClearContents
Worksheets(Fund1).Range("G3").FormulaR1C1 = _
    "='" & Fund1L & "'!RC-'" & Fund1S & "'!RC"
Worksheets(Fund1).Range("G3").Copy
Worksheets(Fund1).Select
Range("H3:M3,g4:m6,g8:m10,g12:m12,g14:m14, _
g16:m16,g19:m21,g23:m34,g36:m43, _
g45:m52,g54:m55,g57:m59,g61:m63, _
g65:m67,g69:m71,g73:m74,g76:m76,g78:m79, _
g82:m83,g85:m91,g93:m94").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

'ここでWorksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12,g14:m14,g16:m16,g19:m21,g23:m34,g36:m43, _
g45:m52,g54:m55,g57:m59,g61:m63,g65:m67,g69:m71,g73:m74,g76:m76, _
g78:m79,g82:m83,g85:m91,g93:m94")
に入っている式の結果を、同じ範囲に値として貼り付けたいのですがどうしたらよいでしょうか。
「新しいマクロの記録」を使って自分で勉強しようと思いましたが、「そのコマンドは複数の選択範囲に対して実行できません。」のメッセージが出てきてしまいました。

End Sub

【24886】Re:変数として宣言したシート名やファイ...
質問  K E-MAIL  - 05/5/12(木) 15:33 -

引用なし
パスワード
   実は【24863】に書いたコードに一箇所間違いがありまして、本当は

Const FileName As String = "Nov2004.xls"

Sub Format()
'中略
Cells.Replace What:="[Nov2004.xls]", Replacement:="" _
    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
    :=False, ReplaceFormat:=False
End Sub
と書きたかったのです。
それで"[Nov2004.xls]"の部分も定数を使って表したいのです。

ichinoseさんの回答をヒントに
Cells.Replace What:="[" & FileName & "]", Replacement:="" _
でやってみればいいのかな?と思ったのですが、うまくいきません。
もしわかる方がいらっしゃったら回答をよろしくお願いします。
何度もすみません。

【24888】Re:変数として宣言したシート名やファイ...
発言  Jaka  - 05/5/12(木) 16:04 -

引用なし
パスワード
   ichinoseさんおじゃまです。

>それで"[Nov2004.xls]"の部分も定数を使って表したいのです。

>ichinoseさんの回答をヒントに
>Cells.Replace What:="[" & FileName & "]", Replacement:="" _
>でやってみればいいのかな?と思ったのですが、うまくいきません。

>What:="[" & FileName & "]"
この辺の使い方はあっていますが、
FileNameって予約語ですよ。
変数名に使う事自体が間違ってます。
別の変数名に変えてください。
1度予約語を変数名に使っちゃったので、

ActiveWorkbook.SaveAs FileName:=・・・・・
こういうのに支障が無ければ良いんですが....。

【24898】Re:複数の選択範囲に対して値の貼り付け...
発言  ichinose  - 05/5/12(木) 21:19 -

引用なし
パスワード
   K さん、Jakaさん
こんばんは。

>コードを書き進めていくうちに別の疑問が生じました。
>
>Option Explicit
>Const Fund1 As String = "A"
>Const Fund1L As String = "A MV(L)"
>Const Fund1S As String = "A MV(S)"
>Const FileName As String = "Nov04.xls"
>
>
>Sub Format()
>Worksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12, _
>g14:m14,g16:m16,g19:m21,g23:m34,g36:m43,g45:m52, _
>g54:m55,g57:m59,g61:m63,g65:m67, _
>g69:m71,g73:m74,g76:m76,g78:m79,g82:m83, _
>g85:m91,g93:m94").ClearContents
>Worksheets(Fund1).Range("G3").FormulaR1C1 = _
>    "='" & Fund1L & "'!RC-'" & Fund1S & "'!RC"
>Worksheets(Fund1).Range("G3").Copy
>Worksheets(Fund1).Select
>Range("H3:M3,g4:m6,g8:m10,g12:m12,g14:m14, _
>g16:m16,g19:m21,g23:m34,g36:m43, _
>g45:m52,g54:m55,g57:m59,g61:m63, _
>g65:m67,g69:m71,g73:m74,g76:m76,g78:m79, _
>g82:m83,g85:m91,g93:m94").Select
>Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
>    SkipBlanks:=False, Transpose:=False
>
>'ここでWorksheets(PGSFund1).Range("g3:m6,g8:m10,g12:m12,g14:m14,g16:m16,g19:m21,g23:m34,g36:m43, _
>g45:m52,g54:m55,g57:m59,g61:m63,g65:m67,g69:m71,g73:m74,g76:m76, _
>g78:m79,g82:m83,g85:m91,g93:m94")
>に入っている式の結果を、同じ範囲に値として貼り付けたいのですがどうしたらよいでしょうか。
>「新しいマクロの記録」を使って自分で勉強しようと思いましたが、「そのコマンドは複数の選択範囲に対して実行できません。」のメッセージが出てきてしまいました。
>
>End Sub
まず、「同じ範囲に値として貼り付けたい」ですが、

セルをひとつに限定した場合(例えばセルA1)、

with Worksheets(PGSFund1).Range("a1")
  .value=.value
  end with

で可能です。
これをK さんの例では、指定されたセル範囲をエリア単位で
変換します。
'===========================================================
Sub test()
Dim rng As Range
With Worksheets(PGSFund1).Range _
 ("g3:m6,g8:m10,g12:m12,g14:m14,g16:m16,g19:m21,g23:m34,g36:m43," & _
 "g45:m52,g54:m55,g57:m59,g61:m63,g65:m67,g69:m71,g73:m74,g76:m76," & _
 "g78:m79,g82:m83,g85:m91,g93:m94")
  For Each rng In .Areas
   With rng
    .Value = .Value
     End With
   Next
  End With
End Sub

尚、センテンスが複数行になるときに付ける 「_」を
文字列内で"・・・・・ _"という使い方をされていますが、
これだと複数行とは認識しません。
この場合は、一度文字列を終わらせて&で連結しましょう。

【24909】ブック全体に対しての置換
質問  K E-MAIL  - 05/5/13(金) 14:15 -

引用なし
パスワード
   実際のコードの中ではFileNameの代わりにCopyFromFileNameを使っていたのですが、投稿する際に省略してしまいました。
Jakaさん、ご心配頂きありがとうございました。

ところで自分が「うまくいきません。」と思った理由がわかりました。
そのときアクティブになっているシートに対してのみ
Cells.Replace What:="[" & CopyFromFileName & "]", Replacement:="" _
    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
    :=False, ReplaceFormat:=False
が実行されるのですね。
違うシートを見て、「あれ、うまくいかないなぁ。」と思っていたのです。
上のコードは「検索場所」として「ブック」を指定した状態で行った検索を「新しいマクロの記録」で記録し、それを利用して作ったのものなので、ブック全体のシートに対して実行されると思ったのです。

ブック全体のシートに対して実行させるには
Dim Fund(10) As String
Fund(0) = "A"
Fund(1) =...とかって、配列を宣言してから

Dim i As Integer
  For i = 0 To 10
  Sheets(Fund(i)).Select
  Cells.Replace What:="[" & CopyFromFileName & "]", Replacement:="" _
    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
    :=False, ReplaceFormat:=False
  Next i

というふうにするしかないのでしょうか?

【24913】Re:ブック全体に対しての置換
回答  Jaka  - 05/5/13(金) 15:08 -

引用なし
パスワード
   >  For i = 0 To 10
>  Sheets(Fund(i)).Select
>  Cells.Replace What:="[" & CopyFromFileName & "]", Replacement:="" _
>    , LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat _
>    :=False, ReplaceFormat:=False
>  Next i

  Sheets(Fund(i)).Cells.Replace What:="[" & CopyFromFileName &

明確に指定してやれば選択する必要はほとんどありません。
更に明確にすると(自ブックだった場合)
ThisWorkbook.Sheets(Fund(i)).Cells.Replace

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