Excel VBA質問箱 IV

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

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


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

【21109】特定の文字の入ったセルを下にシフトして... bee 05/1/12(水) 10:52 質問[未読]
【21110】Re:特定の文字の入ったセルを下にシフトし... IROC 05/1/12(水) 11:10 質問[未読]
【21111】Re:特定の文字の入ったセルを下にシフト... bee 05/1/12(水) 11:22 質問[未読]
【21112】Re:特定の文字の入ったセルを下にシフト... IROC 05/1/12(水) 11:40 回答[未読]
【21116】Re:特定の文字の入ったセルを下にシフト... bee 05/1/12(水) 13:35 質問[未読]
【21118】Re:特定の文字の入ったセルを下にシフト... IROC 05/1/12(水) 14:16 回答[未読]
【21122】Re:特定の文字の入ったセルを下にシフト... bee 05/1/12(水) 15:27 質問[未読]
【21125】Re:特定の文字の入ったセルを下にシフト... IROC 05/1/12(水) 16:39 回答[未読]
【21128】Re:特定の文字の入ったセルを下にシフトし... Jaka 05/1/12(水) 16:55 回答[未読]
【21132】Re:特定の文字の入ったセルを下にシフト... bee 05/1/12(水) 18:16 質問[未読]
【21134】Re:特定の文字の入ったセルを下にシフト... IROC 05/1/12(水) 18:29 回答[未読]
【21145】Re:特定の文字の入ったセルを下にシフト... bee 05/1/13(木) 9:18 お礼[未読]

【21109】特定の文字の入ったセルを下にシフトして...
質問  bee  - 05/1/12(水) 10:52 -

引用なし
パスワード
   こんにちわ。

早速ですが、質問です。


下のような表があるとします。

      A       B
-------------------------------
1    AAAA      BBBB
2            あああ
3           CCCC
4           DDDD
5           EEEE


8    111111    22222
9           あああ
10           CCCC
11           DDDD
12
13    333333    444444
14           あああ
15
16
17    fffff     gggg
18           あああ
19           hhhh
20           iiii


B列の“あああ”をその同一列で下方向、一番近い空白に
(セル2B→セル6B、セル9B→セル12Bのように)下にシフトして
移動するマクロを作りたいのです。
セル14Bのようにすぐ下が空白のところは移動の必要がありません。


下のようなマクロを作ってみたのですが、どこかでぐるぐるしている
ようで、うまくいきません。マクロを作るのは初めてですので、どのあたりが
おかしいのか検討がつかなくて困っています。

よろしくお願いします。


====移動マクロ====

Sub 移動マクロ()
'”あああ”セルの移動

番号1 = 1
番号2 = 番号1 + 1

Do Until 番号1 = 20

If Not Cells(番号2, 2) = "" Then

  If Cells(番号1, 2) = “”あああ” Then
  Cells(番号1, 2).Select
  Selection.Cut
  End If

 End If
 
  
   Do Until Cells(番号2, 2) = ""
 
 
   番号2 = 番号2 + 1
  
   Loop

   Cells(番号2, 2).Select
  Selection.Insert Shift:=xlDown
  
番号1 = 番号2 + 1
番号2 = 番号1 + 1


Loop


End Sub

【21110】Re:特定の文字の入ったセルを下にシフト...
質問  IROC  - 05/1/12(水) 11:10 -

引用なし
パスワード
   「下にシフトして移動」の意味がわかりませんので、
処理後の結果がどのようになればいいのか、掲載して頂けませんか?

【21111】Re:特定の文字の入ったセルを下にシフト...
質問  bee  - 05/1/12(水) 11:22 -

引用なし
パスワード
   すいません、分かりにくかったですね。

    A       B
-------------------------------
1    AAAA      BBBB
2           CCCC
3           DDDD
4           EEEE
5           あああ


8    111111    22222
9           CCCC
10           DDDD
11           あああ
12
13    333333    444444
14           あああ
15
16
17    fffff     gggg
18           hhhh
19           iiii
20           あああ


”あああ”の入ったセルは2B→5B、9B→11B、18B→20Bですね。
前の質問では間違っていました。ごめんなさい。


”あああ”の入ったセルから一番近い空白セルに移動したいのですが、
間に入っている"gggg"や"hhh"のような文字セルの数(移動距離かな?)
がバラバラなのが悩みどころです。

【21112】Re:特定の文字の入ったセルを下にシフト...
回答  IROC  - 05/1/12(水) 11:40 -

引用なし
パスワード
   こんなとこかな?


Sub Sample()
Dim i As Long
Dim s As Long

  For i = Range("b65536").End(xlUp).Row To 1 Step -1
    If Cells(i, 2).Value = "あああ" And Cells(i + 1, 2).Value <> "" Then
      For s = i + 1 To Range("b65536").End(xlUp).Row
        If Cells(s, 2).Value = "" Then
          Cells(i, 2).Copy Cells(s, 2)
          Cells(i, 2).Delete xlShiftUp
          Exit For
        End If
      Next s
    End If
  Next i
End Sub

【21116】Re:特定の文字の入ったセルを下にシフト...
質問  bee  - 05/1/12(水) 13:35 -

引用なし
パスワード
   IROC様

早速の回答ありがとうございました。

作っていただいたマクロを試してみましたら、下のように
なりました。


    A       B
-------------------------------
1    AAAA      BBBB
2           CCCC
3           DDDD
4           EEEE
5           あああ

7           22222
8   111111     CCCC
9           DDDD
10           あああ
11
12           444444
13           あああ
14   333333
15           gggg
16           あああ
17           hhhh
18   fffff     iiii
19
20


マクロを実行する前


    A       B
-------------------------------
1    AAAA      BBBB
2           あああ
3           CCCC
4           DDDD
5           EEEE


8    111111    22222
9           あああ
10           CCCC
11           DDDD
12
13    333333    444444
14           あああ
15
16
17    fffff     gggg
18           あああ
19           hhhh
20           iiii


このときの7Bと12Bにあった空白セルが削除されて、
その分、上にあがるんですね。

横の関係(”11111”の左隣は”22222”、”333333”の隣は”444444”
というように)は変えたくないのです。

また、18Bの“あああ”は下に移動しないようです。


すみません、マクロ式全体でわからないことだらけなのですが
、まずは4行目

  For i = Range("b65536").End(xlUp).Row To 1 Step -1

の意味が良くわかりません。 b65536を基点に下から上に
処理を行っていると思っていいでしょうか?


わがままを言いますが、よろしくご指導ください

【21118】Re:特定の文字の入ったセルを下にシフト...
回答  IROC  - 05/1/12(水) 14:16 -

引用なし
パスワード
   >横の関係(”11111”の左隣は”22222”、”333333”の隣は”444444”
>というように)は変えたくないのです。
行単位でのコピー・削除に変更してみました。


>また、18Bの“あああ”は下に移動しないようです。
理由が分かりません。
どのような条件により、セルB18を対象外とするのでしょうか?

>  For i = Range("b65536").End(xlUp).Row To 1 Step -1
>の意味が良くわかりません。 b65536を基点に下から上に
>処理を行っていると思っていいでしょうか?

セルB65536 で ctrl+↑ キーを押してジャンプしたセルの行番号から
上方向にループ処理しています。
ヘルプでEndプロパティについてお調べ下さい。
これはデータの最下行を取得する定番の方法です。


−−−−−−−−−−−−−−−−−−−−−−

Sub Sample2()
Dim i As Long, s As Long, r As Long

  For i = Range("B65536").End(xlUp).Row To 1 Step -1
  
    If Cells(i, 2).Value = "あああ" And Cells(i + 1, 2).Value <> "" Then
      r = i
      For s = r + 1 To Range("B65536").End(xlUp).Row + 1
        If Cells(s, 2).Value = "" Then
          Rows(i).Copy
          Rows(s).Insert xlShiftDown
          Rows(i).Delete xlShiftUp
          Exit For
        End If
      Next s
      
    End If
    
  Next i
End Sub

【21122】Re:特定の文字の入ったセルを下にシフト...
質問  bee  - 05/1/12(水) 15:27 -

引用なし
パスワード
   ▼IROC さん:
ありがとうございます。

>
>
>>また、18Bの“あああ”は下に移動しないようです。
>理由が分かりません。
>どのような条件により、セルB18を対象外とするのでしょうか?
>
 いただいたマクロを実行してきたら、なぜかb18が
 動かなかった、ということで、条件ではないです。

>>横の関係(”11111”の左隣は”22222”、”333333”の隣は”444444”
>>というように)は変えたくないのです。
>行単位でのコピー・削除に変更してみました。

これでほぼOKです。ただセル単位で移動させる方法はありませんでしょうか?

条件が増えてしまいますが、たとえば


    A       B
-------------------------------
1    AAAA      BBBB
2    XXXX     あああ
3           CCCC
4           DDDD
5           EEEE


8    111111    22222
9           あああ
10           CCCC
11           DDDD

 という表を

    A       B
-------------------------------
1    AAAA      BBBB
2    XXXX      CCCC
3           DDDD
4           EEEE
5           あああ


8   111111     22222
9           CCCC
10           DDDD
11           あああ

に変えたいという場合、"AAAA"と"XXXX"の関係も保ちたい場合もあり、
B列の中だけで処理できればありがたいです。

【21125】Re:特定の文字の入ったセルを下にシフト...
回答  IROC  - 05/1/12(水) 16:39 -

引用なし
パスワード
   すみません。前者については読み間違いの勘違いです。(__;)

後者については、いまは時間切れですので、追ってご連絡させていただきます。

【21128】Re:特定の文字の入ったセルを下にシフト...
回答  Jaka  - 05/1/12(水) 16:55 -

引用なし
パスワード
   Sub came()
Dim fsr1 As Long, fsr2 As Long
Rows(1).Insert
fsr1 = 2
Do Until Range("A" & fsr1).End(xlDown).Row = 65536 And Range("B" & fsr1).Value = ""
  If Range("A" & fsr1 + 1).Value = "" Then
   fsr2 = Range("B" & fsr1).End(xlDown).Row
   Range("B" & fsr1 & ":B" & fsr2).Sort Key1:=Range("B" & fsr1 - 1), _
      Order1:=xlAscending
   fsr1 = Range("A" & fsr2).End(xlDown).Row
  Else
   fsr1 = fsr1 + 1
  End If
Loop
Rows(1).Delete
End Sub

【21132】Re:特定の文字の入ったセルを下にシフト...
質問  bee  - 05/1/12(水) 18:16 -

引用なし
パスワード
   JaKa様

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

試してみたところ、例に挙げた表ではうまくいきましたが、
仕事で使っている表で試したところ、同じようになりません。


また

    A       B
-------------------------------
1    AAAA      BBBB
2           あああ
3           CCCC
4           DDDD
5           EEEE


8    111111    22222
9           いいい
10           CCCC
11           DDDD
12
13    333333    444444
14           えええ
15
16
17    fffff     gggg
18           おおお
19           hhhh
20           iiii


上のような表の場合はひらがなで入力されているセルはすべて
”あああ”も”おおお”も同じように移動してしまいます。

文字列でかつ”あああ”という内容のものだけ移動させたいのです。
上の表では整数とアルファベット、ひらがなが入力されていますが、
表の中は全部文字列で入力されていても、特定の文字だけ移動するように
ならないでしょうか。

いただいたマクロ式は難しくて移動させたいセルを特定しているのが
どの部分なのか、すぐにはわかりませんでした。
今日一日考えてみます。

【21134】Re:特定の文字の入ったセルを下にシフト...
回答  IROC  - 05/1/12(水) 18:29 -

引用なし
パスワード
   こんどはどうでしょう?

Sub Sample3()
Dim i As Long
Dim s As Long

  For i = Range("b65536").End(xlUp).Row To 1 Step -1
    If Cells(i, 2).Value = "あああ" And Cells(i + 1, 2).Value <> "" Then
      For s = i + 1 To Range("b65536").End(xlUp).Row + 1
        If Cells(s, 2).Value = "" Then
          Cells(i, 2).Copy
          Cells(s, 2).Insert xlShiftDown
          Cells(i, 2).Delete xlShiftUp
          Exit For
        End If
      Next s
    End If
  Next i

End Sub

【21145】Re:特定の文字の入ったセルを下にシフト...
お礼  bee  - 05/1/13(木) 9:18 -

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

おはようございます

できました。仕事で使う表もばっちりでした。

何百ページにも渡る報告書を変換しなくてはならなかったのですが
すばらしく効率よくできそうです。

初心者の私にもわかりやすい式ですし、応用を考えることで
勉強になります。

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

▼Jakaさん

いただいた式は範囲を区切ってその中でソートするようになっていたんですね。
今回のケースにはあてはまらなかったけど、勉強になりました。
ありがとうございました。

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