Excel VBA質問箱 IV

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

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


4372 / 13644 ツリー ←次へ | 前へ→

【57053】B列全てで実行したい tobima 08/7/20(日) 13:55 質問[未読]
【57054】Re:B列全てで実行したい かみちゃん 08/7/20(日) 14:07 発言[未読]
【57055】Re:B列全てで実行したい tobima 08/7/20(日) 14:47 質問[未読]
【57056】Re:B列全てで実行したい かみちゃん 08/7/20(日) 14:54 発言[未読]
【57057】Re:B列全てで実行したい tobima 08/7/20(日) 14:57 発言[未読]
【57063】Re:B列全てで実行したい kanabun 08/7/21(月) 14:58 発言[未読]
【57064】Re:B列全てで実行したい tobima 08/7/21(月) 16:55 発言[未読]
【57065】Re:B列全てで実行したい kanabun 08/7/21(月) 21:06 発言[未読]
【57066】Re:B列全てで実行したい かみちゃん 08/7/21(月) 21:23 発言[未読]
【57067】Re:B列全てで実行したい tobima 08/7/21(月) 23:28 お礼[未読]

【57053】B列全てで実行したい
質問  tobima  - 08/7/20(日) 13:55 -

引用なし
パスワード
   下記のマクロをB列全部にデータがある場合、実行させたいのですが、
うまくいきません。
自分の知識不足で、rangeの定義がうまくいかず、根本的なことが
わからず、時間がないため、質問させていただきました。
どなたか、よろしくお願いします。

Sub kaigyo()


Const kaigyo As Long = 50
Dim s As Variant
Dim i As Long, j As Long, k As Long
Dim v() As Variant
  s = Split(Range("B1").Value, vbLf)
  k = 0
  For i = 0 To UBound(s)
    For j = 1 To Len(s(i)) Step kaigyo
      ReDim Preserve v(k)
      v(k) = Mid$(s(i), j, kaigyo)
      k = k + 1
    Next
  Next
  Range("B1").Value = Join(v, vbLf)

End Sub

【57054】Re:B列全てで実行したい
発言  かみちゃん  - 08/7/20(日) 14:07 -

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

>下記のマクロをB列全部にデータがある場合、実行させたい

質問の意図がつかめていないかもしれませんが、B列全部にデータがあるかどうかは
以下のような感じで判断できると思います。

 If WorksheetFunction.CountA(Columns("B")) = Rows.Count Then
  MsgBox "B列にすべてデータがあります"
 Else
  MsgBox "B列にデータがないセルがあります"
 End If

【57055】Re:B列全てで実行したい
質問  tobima  - 08/7/20(日) 14:47 -

引用なし
パスワード
   最初の質問が間違っていました。
再度、訂正させていただきます。

下記のマクロをB列の中でデータがある行だけ、実行させたいのですが、
うまくいきません。
自分の知識不足で、rangeの定義がうまくいかず、根本的なことが
わからず、時間がないため、質問させていただきました。
どなたか、よろしくお願いします。

Sub kaigyo()


Const kaigyo As Long = 50
Dim s As Variant
Dim i As Long, j As Long, k As Long
Dim v() As Variant
  s = Split(Range("B1").Value, vbLf)
  k = 0
  For i = 0 To UBound(s)
    For j = 1 To Len(s(i)) Step kaigyo
      ReDim Preserve v(k)
      v(k) = Mid$(s(i), j, kaigyo)
      k = k + 1
    Next
  Next
  Range("B1").Value = Join(v, vbLf)

End Sub

PS かみちゃんさん。早速の回答ありがとうございました。
質問が間違っているのに気づきました。

【57056】Re:B列全てで実行したい
発言  かみちゃん  - 08/7/20(日) 14:54 -

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

>下記のマクロをB列の中でデータがある行だけ、実行させたい

B列の中でデータがあるセルを選択するには、一般操作の「編集」−「ジャンプ」の「セル選択」で
できますが、ご存知ですか?

ご存知であれば、それをマクロの記録で記録してみてください。

後は、そのセル範囲を以下のような感じですることによりできると思います。

Dim c As Range

For Each c In Range(〜
 s = Split(c.Value, vbLf)
 '〜省略〜
Next

【57057】Re:B列全てで実行したい
発言  tobima  - 08/7/20(日) 14:57 -

引用なし
パスワード
   こんにちわ。かみちゃんさん。

ありがとうございます。
早速、やってみます。

【57063】Re:B列全てで実行したい
発言  kanabun  - 08/7/21(月) 14:58 -

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

> もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました
> 」ということを宣言してください。そして、仮に他のサイトで解決したのなら
> 、ここにも必ずその顛末を書いてください。
> 質問しっぱなし、というのはモラルに反します。

【57064】Re:B列全てで実行したい
発言  tobima  - 08/7/21(月) 16:55 -

引用なし
パスワード
   ▼kanabun さん: cc かみちゃんさん

すいません。
他のサイトでレスポンスが遅かった為、マルチになってしまいました。

現在、かみちゃんさんの教えに従い、試行錯誤中です。

自分で納得いきましたら、改めまして結果報告させて頂きます。

ps
初めて、掲示板等利用させていただきますので、今後も失礼なことが
ありましたら、ご教示下さい。

【57065】Re:B列全てで実行したい
発言  kanabun  - 08/7/21(月) 21:06 -

引用なし
パスワード
   ▼tobima さん:
こんにちは
マルチに関する発言は、ぼくの勇み足だったようですね
すみません。

他のサイトでのアドバイスにあるように、
> D 列に数式が有り得ないなら、xlCellTypeFormulas を Union する
> 必要はありません。
データ最終セルまで...ループすればいいです。

かみちゃんさんのコードをお借りすれば

Dim c As Range

For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp))
 s = Split(c.Value, vbLf)
 '〜省略〜
Next

といった単純な範囲指定(最初のセル、最後のセル)で
ループすればいいかと思います。

【57066】Re:B列全てで実行したい
発言  かみちゃん  - 08/7/21(月) 21:23 -

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

>かみちゃんさんのコードをお借りすれば
>
>Dim c As Range
>
>For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp))
> s = Split(c.Value, vbLf)
> '〜省略〜
>Next
>
>といった単純な範囲指定(最初のセル、最後のセル)で
>ループすればいいかと思います。

私が単純な範囲指定でのループを提案していないのは、
> B列の中でデータがある行だけ、実行させたい
という要件で、無用なセルの読み込みをさせないというところがポイントでした。

それについては、一般操作の「ジャンプ」機能を「マクロの記録」で記録すれば
わかることなので、そんなに難しい話ではないはずです。

もちろん、データがない行も読み込んで、データがあるセルの場合だけ、
For 〜 Next 内の処理をするならば、kanabunさんの方法でもいいと思います。

For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp))
 If c.Value <> "" Then
  s = Split(c.Value, vbLf)
  '〜省略〜
 End If
Next

【57067】Re:B列全てで実行したい
お礼  tobima  - 08/7/21(月) 23:28 -

引用なし
パスワード
   かみちゃんさん kanabunさん

こんばんわ。

ようやく完成しました。

お二人からのアドバイスに従い、何度か試した結果、
ようやくスムーズになりました。

時間はかかりましたが、自分なりに理解できました。

本当にありがとうございました。

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