利用規約の変更について

Set Target = ThisWorkbook
With Target.VBProject.VBComponents("Module2").CodeModule
For i = 1 To .CountOfLines
If .Lines(i, 2) = Range("AE77").FormulaArray = _
"=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)" Then
.ReplaceLine i, Range("AE77").FormulaR1C1 = _
"=ROUNDDOWN((SUMIF(R11C19:R72C19,""*1号施設*"",範囲1)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲2)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲3)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲4)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲5)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲6))/8,0)"
End If
Next i
End With


If .Lines(i, 2) =    
以下の
Range("AE77").FormulaArray = _
"=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)"  Then

記入方法が解りません。

605行目からは2行にわたるコードを記載してるのですが、Range("AE77").FormulaArray = 以下>=8)*1)"まで(605行以外にもあるのでForで廻してます)

文字列として””で括るるんだろうなと思ってトライしましたが、””で括る場所が多すぎてどこに付ければいいのやらです。最初と最後を””付けるだけでなく元々("AE77")のようになっている場所には更に””を付けたりするのでしょうか?それも試しましたが、途中の:にも何かしなくてはならないような‥
どなたかご教示願います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Dim s As String


s = " Range(""AE77"").FormulaArray = _" & vbCrLf & _
" ""=SUMPRODUCT((ISNUMBER(FIND(""""1号施設"""",R11C19:R72C19)))*1,(" & _
"(IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)" & _
"+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)" & _
"+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)"""
MsgBox s
s = " Range(""AE77"").FormulaR1C1 = _" & vbCrLf & _
" ""=ROUNDDOWN((SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲1)" & _
"+SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲2)" & _
"+SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲3)" & _
"+SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲4)" & _
"+SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲5)" & _
"+SUMIF(R11C19:R72C19,""""*1号施設*"""",範囲6))/8,0)"""
MsgBox s

『"』(ダブルクォート)文字列をコード出力したい時、
コード内に記述する時は『""』のように2つ重ねます。2つで『"』1コ分です。
数式に『"1号施設"』と記述したい時にコード内では『""1号施設""』としますよね。
コード内の『""1号施設""』を、検索対象文字列としてさらにコード内で記述するには
『""""1号施設""""』とします。

またコード内でインデントしてるでしょうから、その分のスペースも考慮した文字列にしないといけませんね。
(または各行Trimして判断するか)

さらに、2行分を検索してますから
" 1行目 _" & vbCrLf & " 2行目"
と、vbCrLf で繋いで判定しないといけないです。

また、
.ReplaceLine i, "置換文字列1行目" & vbCrLf & "置換文字列2行目"
として i 行目1行、に対して2行置換してますから、元コードの直後の行を削除する必要があります。
1行余分に挿入されてますからその分ずれて
.DeleteLines i + 2
です。



しかしながら、Module内コードをマクロから書き換える操作はおすすめしません。
事情があるのでしょうけど、そもそもの仕様から見直すようにされたほうが良いでしょう。
恐らく多数のユーザーに配布してしまったBookの書き換えの為でしょうけど、
そういった配布の問題については、マクロブックとデータブックの分離、アドインの導入、
など検討されたほうが良いかと思います。
http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub0 …

この回答への補足

end-uさん。お久しぶりです。1年くらい前によくここで質問していたのですが、その時も何度も助けて頂きました。今回も早速の回答ありがとうございます。
さて、試させていただいたところ。
まさにMsgBox には寸分たがわぬ式が表示されます。
そこでs =以下をIf .Lines(i, 2) =以下にそのまま貼り付けてみてテストしましたが、ヒットしません。スルーされてしまいます。
そこでそれ以前の流れの検証のため、式を簡略しIf .Lines(i, 1) ="A = B"
として適当なところにA=Bと記入しヒットするか検証し、結果問題なくヒットしました。
よって同一の文字列と見ていないということになるのでしょうが、しっかり記入してるのを確認してます。
If .Lines(i, 2) =    ←  辺りに問題あるのでしょうか?(でも間違いなく2行ですし‥)
お手数ですが、今一度、お付き合いねがえませんか?

補足日時:2010/12/21 19:44
    • good
    • 0
この回答へのお礼

最新の回答で気付かされましたが、すでにこの回答時で完璧だったのですね。
ありがとうございました。

お礼日時:2010/12/21 22:22

>またコード内でインデントしてるでしょうから、その分のスペースも考慮した文字列にしないといけませんね。


インデントのスペースも文字列の前に付けてますか?

一応チェックコードとして
Sub test()
  Dim s As String
  Dim i As Long
  With ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
    For i = 1 To .CountOfLines
      If Trim(.Lines(i, 1)) = "Range(""AE77"").FormulaArray = _" Then
        Debug.Print .Lines(i, 2)
        Debug.Print "■検索文字↓■"
        Debug.Print """" & Replace(.Lines(i, 1), """", """""") & """" & " & vbCrLf & _"
        Debug.Print """" & Replace(.Lines(i + 1, 1), """", """""") & """"
      End If
    Next
  End With
End Sub
うまくいけば[イミディエイトウィンドウ]に検索文字が書き出されます。
それを使ってみてください。
    • good
    • 0
この回答へのお礼

>またコード内でインデントしてるでしょうから、その分のスペースも考慮した文字列にしないといけませんね。

 見落としてました。まさにそこでした。
自分なりにDebug.Printしてみてたりしてたのですがスペースを考慮させてない表示でしたので、それをみてもまったく同じ式なのに‥と悩んでました。
ついでに、スペースを反映させるデバックのコードまで示して頂き大変助かります。
実は、さらに類似の処理も続くので、スペース数えたりする手間が省けました。
また、考えかたもご教示頂き、いつもながら頭が下がります。
まさに痒いところに手が届く完璧な回答でした。

助かりました。本当にありがとうございます。
end-uさんはいろんな方に回答なされているでしょうから覚えてないとは思いますがyokokama46は昔end-uさんに本当に助けて貰ったのを覚えています。
また、一年振り以上なのでここのデザインも変わったことに少しとまどいながらも、ken-kenSPさんやredfox63さんにもお世話になってたことも思い出したりしました。
関係ない話で恐縮ですが、久しぶりの質問に、一番お世話になったend-uさんからの回答でしたので、驚きと感動でしたのでお許し下さい。
また、よろしくお願いします。

お礼日時:2010/12/21 22:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


人気Q&Aランキング

おすすめ情報