Excel VBA質問箱 IV

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

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


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

【46753】範囲指定をして後マクロを走らす 杉下 誠 07/2/14(水) 8:24 質問[未読]
【46754】Re:範囲指定をして後マクロを走らす Blue 07/2/14(水) 8:43 回答[未読]
【46843】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/18(日) 18:28 質問[未読]
【46844】Re:範囲指定をして後マクロを走らす かみちゃん 07/2/18(日) 18:49 発言[未読]
【46848】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/18(日) 21:21 お礼[未読]
【46850】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/18(日) 21:30 お礼[未読]
【46858】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/19(月) 10:10 お礼[未読]
【46868】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/19(月) 13:10 質問[未読]
【46887】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/19(月) 20:36 お礼[未読]
【46845】Re:範囲指定をして後マクロを走らす Kein 07/2/18(日) 19:06 回答[未読]
【46849】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/18(日) 21:23 お礼[未読]
【46865】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/19(月) 13:03 質問[未読]
【46870】Re:範囲指定をして後マクロを走らす Kein 07/2/19(月) 13:34 発言[未読]
【46886】Re:範囲指定をして後マクロを走らす 杉下 誠 07/2/19(月) 20:34 お礼[未読]

【46753】範囲指定をして後マクロを走らす
質問  杉下 誠  - 07/2/14(水) 8:24 -

引用なし
パスワード
   下記教えて下さい。
マウスで範囲指定(例:B2〜B10〜C2〜C10をドラッグ)後、各セル毎に同じ動作のマクロを走らし、範囲指定したセル全てのマクロ動作が終わったら自動的にマクロが止まるVBAのプログラム。
この範囲指定範囲を走らす条件文と最後マクロをとめる文はどう書くのでしょうか?

【46754】Re:範囲指定をして後マクロを走らす
回答  Blue  - 07/2/14(水) 8:43 -

引用なし
パスワード
   ▼杉下 誠 さん:
>この範囲指定範囲を走らす条件文と最後マクロをとめる文はどう書くのでしょうか?
選択範囲は Selection で取得できます。

' Sample
Sub Sample()
  Dim r As Range
  If TypeOf Selection Is Range Then
    For Each r In Selection
      r.Value = "てすと"
    Next
  End If
End Sub


処理が終われば勝手にとまってくれるので
「マクロをとめる」ってコードを書くわけではないです。
# 無限ループしちゃってどうしてもとめたいってことはあるが。

【46843】Re:範囲指定をして後マクロを走らす
質問  杉下 誠  - 07/2/18(日) 18:28 -

引用なし
パスワード
   アドバイス頂き有難う御座いました。勉強しております。苦戦しております。
恐縮ですが再度下記教えて下さい。

選択したセル全てにおいて、ある操作をした後、そのセルにデータとして各々
'=RSS|'2575.T'!現在値
'=RSS|'8625.T'!現在値
'=RSS|'1953.T'!現在値
'=RSS|'4498.T'!現在値
等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
(" ") ここの箇所はどの様な文を入れればよいでしょうか?
VBA文:
Dim r As Range
  If TypeOf Selection Is Range Then
    For Each r In Selection
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,        SkipBlanks _:=False, Transpose:=False
  Application.CutCopyMode = False
  ActiveCell.FormulaR1C1 = Range(" ").Formula
  Next
  End If
End Sub

【46844】Re:範囲指定をして後マクロを走らす
発言  かみちゃん  - 07/2/18(日) 18:49 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

> '=RSS|'4498.T'!現在値
>等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。

その前に以下のスレッドと関係があるのでしょうか?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46773;id=excel
上記スレッドの[46787]の結果はどうなったのでしょうか?

>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>(" ") ここの箇所はどの様な文を入れればよいでしょうか?

コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
 Dim r As Range
 
 If TypeOf Selection Is Range Then
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
   :=False, Transpose:=False
  Application.CutCopyMode = False
  For Each r In Selection
'   Selection.Copy
'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
'    :=False, Transpose:=False
'   Application.CutCopyMode = False
'   ActiveCell.FormulaR1C1 = Range(" ").Formula
   If Left(r.Value, 1) = "'" Then
    r.Formula = Mid(r.Value, 2)
   End If
  Next
 End If

なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

【46845】Re:範囲指定をして後マクロを走らす
回答  Kein  - 07/2/18(日) 19:06 -

引用なし
パスワード
   全体として、こんな感じでどうでしょーか ?

Sub Test_Clean()
  Dim r As Range
 
  If Not TypeOf Selection Is Range Then Exit Sub
  With Selection
   If .Find("=", , xlValues, xlPart) Is Nothing Then
     Exit Sub
   End If
   For Each r In .SpecialCells(2)
     If Left$(r, 1) = "=" Then
      r.Formula = r.Formula
     End If
   Next
  End With
End Sub

【46848】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/18(日) 21:21 -

引用なし
パスワード
   ▼かみちゃん さん:
早速の回答有難う御座います。流石感心しております。株式です。
今日は時間とれず、明日教えていただいた分トライします。

>こんにちは。かみちゃん です。
>
>横から失礼します。
>
>> '=RSS|'4498.T'!現在値
>>等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。
>
>その前に以下のスレッドと関係があるのでしょうか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46773;id=excel
>上記スレッドの[46787]の結果はどうなったのでしょうか?
>
>>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>>(" ") ここの箇所はどの様な文を入れればよいでしょうか?
>
>コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
> Dim r As Range
> 
> If TypeOf Selection Is Range Then
>  Selection.Copy
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>   :=False, Transpose:=False
>  Application.CutCopyMode = False
>  For Each r In Selection
>'   Selection.Copy
>'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>'    :=False, Transpose:=False
>'   Application.CutCopyMode = False
>'   ActiveCell.FormulaR1C1 = Range(" ").Formula
>   If Left(r.Value, 1) = "'" Then
>    r.Formula = Mid(r.Value, 2)
>   End If
>  Next
> End If
>
>なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

【46849】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/18(日) 21:23 -

引用なし
パスワード
   ▼Kein さん:
皆さん教えていただき感謝しております。本日は時間とれず明日確認トライします。

>全体として、こんな感じでどうでしょーか ?
>
>Sub Test_Clean()
>  Dim r As Range
> 
>  If Not TypeOf Selection Is Range Then Exit Sub
>  With Selection
>   If .Find("=", , xlValues, xlPart) Is Nothing Then
>     Exit Sub
>   End If
>   For Each r In .SpecialCells(2)
>     If Left$(r, 1) = "=" Then
>      r.Formula = r.Formula
>     End If
>   Next
>  End With
>End Sub

【46850】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/18(日) 21:30 -

引用なし
パスワード
   ▼かみちゃん さん:
ご指摘の[46787]そのものの継続です。私VBA知識は本当に薄くなり悪戦苦闘しています。何とか[46787]を物にしたい。頑張ります。

>こんにちは。かみちゃん です。
>
>横から失礼します。
>
>> '=RSS|'4498.T'!現在値
>>等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。
>
>その前に以下のスレッドと関係があるのでしょうか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46773;id=excel
>上記スレッドの[46787]の結果はどうなったのでしょうか?
>
>>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>>(" ") ここの箇所はどの様な文を入れればよいでしょうか?
>
>コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
> Dim r As Range
> 
> If TypeOf Selection Is Range Then
>  Selection.Copy
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>   :=False, Transpose:=False
>  Application.CutCopyMode = False
>  For Each r In Selection
>'   Selection.Copy
>'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>'    :=False, Transpose:=False
>'   Application.CutCopyMode = False
>'   ActiveCell.FormulaR1C1 = Range(" ").Formula
>   If Left(r.Value, 1) = "'" Then
>    r.Formula = Mid(r.Value, 2)
>   End If
>  Next
> End If
>
>なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

【46858】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/19(月) 10:10 -

引用なし
パスワード
   ご教示有難う御座います。
頂いたプログラムを走らせたのですが、まだ
  '=RSS|'4498.T'!現在値
この文字式の左端の ' が残り文字認識となります。これを取り数式にしたく。宜しく御願いします。
******************************
>>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>>(" ") ここの箇所はどの様な文を入れればよいでしょうか?
>
>コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
> Dim r As Range
> 
> If TypeOf Selection Is Range Then
>  Selection.Copy
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>   :=False, Transpose:=False
>  Application.CutCopyMode = False
>  For Each r In Selection
>'   Selection.Copy
>'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>'    :=False, Transpose:=False
>'   Application.CutCopyMode = False
>'   ActiveCell.FormulaR1C1 = Range(" ").Formula
>   If Left(r.Value, 1) = "'" Then
>    r.Formula = Mid(r.Value, 2)
>   End If
>  Next
> End If
>
>なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

【46865】Re:範囲指定をして後マクロを走らす
質問  杉下 誠  - 07/2/19(月) 13:03 -

引用なし
パスワード
   ご教示有難う御座います。下記文でマクロを走らせますと、
「実行時エラー'1004'」
「該当するセルが見つかりません」のコメント。
そしてディバックを見ると
For Each r In .SpecialCells(2)
の文が黄色に塗られエラー箇所指示となります。
自分なりに色々修正しましたが直らず。恐縮ですが修正法教えて下さい。

>
>Sub Test_Clean()
>  Dim r As Range
> 
>  If Not TypeOf Selection Is Range Then Exit Sub
>  With Selection
>   If .Find("=", , xlValues, xlPart) Is Nothing Then
>     Exit Sub
>   End If
>   For Each r In .SpecialCells(2)
>     If Left$(r, 1) = "=" Then
>      r.Formula = r.Formula
>     End If
>   Next
>  End With
>End Sub

【46868】Re:範囲指定をして後マクロを走らす
質問  杉下 誠  - 07/2/19(月) 13:10 -

引用なし
パスワード
   ご教示有難う御座います。教えて頂いたマクロを走らせると、まだ
'=RSS|'4498.T'!現在値
の先頭の ’が除去出来ず文字関数のままです。これを除去し数式関数にしたく、宜しくご教示御願い致します。


>> '=RSS|'4498.T'!現在値
>>等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。
>
>その前に以下のスレッドと関係があるのでしょうか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46773;id=excel
>上記スレッドの[46787]の結果はどうなったのでしょうか?
>
>>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>>(" ") ここの箇所はどの様な文を入れればよいでしょうか?
>
>コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
> Dim r As Range
> 
> If TypeOf Selection Is Range Then
>  Selection.Copy
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>   :=False, Transpose:=False
>  Application.CutCopyMode = False
>  For Each r In Selection
>'   Selection.Copy
>'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>'    :=False, Transpose:=False
>'   Application.CutCopyMode = False
>'   ActiveCell.FormulaR1C1 = Range(" ").Formula
>   If Left(r.Value, 1) = "'" Then
>    r.Formula = Mid(r.Value, 2)
>   End If
>  Next
> End If
>
>なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

【46870】Re:範囲指定をして後マクロを走らす
発言  Kein  - 07/2/19(月) 13:34 -

引用なし
パスワード
   SpecialCells(2) で選択される範囲は、メニューの「編集」「ジャンプ」「セル選択」
で "定数" にチェックしたときの範囲です。なぜそうしているかと言うと、数式の頭に
"'"が付くとき、それは数式として計算されずに = 以下が文字列として表示される
"定数"になっているはずだから。です。
で、こちらではそのコードをテストして、問題なく動作することを確認してますが、
いちおうループのところを

For Each r In .Cells
  If Not IsEmpty(r.Value) Then
   If Left$(r, 1) = "=" Then
     r.Formula = r.Formula
   End If
  End If
Next

というように変更して試してみて下さい。

【46886】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/19(月) 20:34 -

引用なし
パスワード
   目的のマクロが正常に走りました。プログラムにコピー、値コピー文追加を忘れていました。これを下記に追加結果OK。有難う御座いました。これから株式のデータ入力が格段にスピードアップします。
又お願い致します。

▼Kein さん:
>SpecialCells(2) で選択される範囲は、メニューの「編集」「ジャンプ」「セル選択」
>で "定数" にチェックしたときの範囲です。なぜそうしているかと言うと、数式の頭に
>"'"が付くとき、それは数式として計算されずに = 以下が文字列として表示される
>"定数"になっているはずだから。です。
>で、こちらではそのコードをテストして、問題なく動作することを確認してますが、
>いちおうループのところを
>
>For Each r In .Cells
>  If Not IsEmpty(r.Value) Then
>   If Left$(r, 1) = "=" Then
>     r.Formula = r.Formula
>   End If
>  End If
>Next
>
>というように変更して試してみて下さい。

【46887】Re:範囲指定をして後マクロを走らす
お礼  杉下 誠  - 07/2/19(月) 20:36 -

引用なし
パスワード
   目的のマクロが正常に走りました。有難う御座いました。これから株式のデータ入力が格段にスピードアップします。
又お願い致します。


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>横から失礼します。
>
>> '=RSS|'4498.T'!現在値
>>等の文字式が変換入力される。この文字式の左端の ' を除去して数式としたく。
>
>その前に以下のスレッドと関係があるのでしょうか?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46773;id=excel
>上記スレッドの[46787]の結果はどうなったのでしょうか?
>
>>この場合下記文のActiveCell.FormulaR1C1 = Range(" ").Formula の中の
>>(" ") ここの箇所はどの様な文を入れればよいでしょうか?
>
>コード全体に無駄がありますので、以下のようにしたほうがいいかと思います。
> Dim r As Range
> 
> If TypeOf Selection Is Range Then
>  Selection.Copy
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>   :=False, Transpose:=False
>  Application.CutCopyMode = False
>  For Each r In Selection
>'   Selection.Copy
>'   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>'    :=False, Transpose:=False
>'   Application.CutCopyMode = False
>'   ActiveCell.FormulaR1C1 = Range(" ").Formula
>   If Left(r.Value, 1) = "'" Then
>    r.Formula = Mid(r.Value, 2)
>   End If
>  Next
> End If
>
>なお、株式関連のRSSかと思いますが、環境がないので、動作確認はしていません。

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