Excel VBA質問箱 IV

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

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


418 / 13645 ツリー ←次へ | 前へ→

【80438】行のデータをクリアして1行づつ繰り上げたい ノンボ 19/2/16(土) 8:11 質問[未読]
【80441】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 9:34 発言[未読]
【80443】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 10:16 発言[未読]
【80445】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/16(土) 11:57 発言[未読]
【80446】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 12:09 発言[未読]
【80447】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 12:27 発言[未読]
【80450】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/16(土) 19:43 発言[未読]
【80452】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 20:23 発言[未読]
【80453】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/16(土) 20:26 発言[未読]
【80454】Re:行のデータをクリアして1行づつ繰り上げ... マナ 19/2/16(土) 21:02 発言[未読]
【80455】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/16(土) 21:27 質問[未読]
【80451】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/16(土) 19:50 発言[未読]
【80476】Re:行のデータをクリアして1行づつ繰り上げ... ピンク 19/2/17(日) 18:53 回答[未読]
【80479】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/17(日) 20:39 お礼[未読]
【80459】Re:行のデータをクリアして1行づつ繰り上げ... γ 19/2/16(土) 22:23 発言[未読]
【80467】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/17(日) 8:18 発言[未読]
【80468】Re:行のデータをクリアして1行づつ繰り上げ... γ 19/2/17(日) 8:47 発言[未読]
【80469】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/17(日) 9:47 発言[未読]
【80472】Re:行のデータをクリアして1行づつ繰り上げ... γ 19/2/17(日) 11:00 発言[未読]
【80474】Re:行のデータをクリアして1行づつ繰り上げ... ノンボ 19/2/17(日) 11:35 お礼[未読]

【80438】行のデータをクリアして1行づつ繰り上げ...
質問  ノンボ  - 19/2/16(土) 8:11 -

引用なし
パスワード
   お世話になります。
VBA勉強中です。質問させていただきます。
下記フォーマットがあります。

1行目 本体金額  税額 合計金額 入金金額 差額
2行目  60,000  4,800 64,800  64,800   0
3行目  50,000  4,000 54,000
4行目  30,000  2,400 32,400  
5行目  50,000  4,000 54,000
6行目  35,000  2,800 37,800
7行目  30,000  2,400 32,400
8行目  25,000  2,000 27,000
9行目    0
10行目    0

タイトル行の列それぞれ結合されています。本体金額(B〜F),税額(G〜J),入金金額(K〜P),差額(U〜W). 税額、入金金額、差額には数式が入っています。
入金金額により差額が0かそうでないかを判断し、2行目から10行目までのフォーマットを崩さずに、0の場合は、行を1行ずつ繰り上げていきます。0でない場合はデータをそのままにしたく、下記コード書きました。
Sub Test5()
  Dim i As Integer, j As Integer
  j = 1
  For i = 2 To 10
  If (Range("U" & i).Rows) = 0 Then
    Rows(i).ClearContents
  End If
  If (Range("B" & i).Rows <> "") Then
    j = j + 1
    Rows(i).Copy Rows(j)
    Rows(i) = ""
  End If
  Next i
End Sub

 0の場合はうまくいきますが、差額が0でない場合は、セルの結合が解除されデータが全て消えてしまいます。セルの数式も残したいのですが、可能でしょうか。
いろいろ調べたり、試したりしましたがうまくいきません。
どのように編集すればよいかご教授ください。

【80441】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 9:34 -

引用なし
パスワード
   ▼ノンボ さん:

何をしているか理解できていませんので
あらためて教えてください。

手作業でならどんな手順になりますか。
箇条書きで説明できますか。

またマクロ実行前だけでなく
実行後も提示お願いします。

【80443】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 10:16 -

引用なし
パスワード
   ▼ノンボ さん:

>またマクロ実行前だけでなく
>実行後も提示お願いします。

文章がおかしかったです。
実行後の期待する結果も提示お願いします。

【80445】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/16(土) 11:57 -

引用なし
パスワード
   マナさん返信ありがとうございます。

手作業ですと、差額が0か0でないかを判断しまして、0の場合はその行をクリアさせ下の行のデータを貼り付けていきます。0でない場合はそのままでなにもしません。
VBA実行後期待する結果は、差額が0の場合0の行をクリアさせて、下のデータを1行づつ繰り上げたいのです。差額が0でない場合は、そのままのにしたいです。
 よろしくお願いします。

【80446】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 12:09 -

引用なし
パスワード
   ▼ノンボ さん:

箇条書きで説明できますか。
わたしの場合、それが、マクロ作成で最初にすることです。

【80447】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 12:27 -

引用なし
パスワード
   ▼ノンボ さん:

>VBA実行後期待する結果は、差額が0の場合0の行をクリアさせて、下のデータを1行づつ繰り上げたいのです。差額が0でない場合は、そのままのにしたいです。

文章ではなく、サンプルデータを表形式で提示できませんか。

【80450】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/16(土) 19:43 -

引用なし
パスワード
   Sub Test5()
  Dim i As Integer, j As Integer
  j = 1
  For i = 2 To 10
  If (Range("U" & i).Rows) = 0 Then
    Rows(i).ClearContents
  End If
  If (Range("B" & i).Rows <> "") Then
    j = j + 1
    Rows(i).Copy Rows(j)
    Rows(i) = ""
  End If
  Next i
End Sub
サンプルのコードです。

【80451】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/16(土) 19:50 -

引用なし
パスワード
   1行目 本体金額  税額 合計金額 入金金額 差額
2行目  60,000  4,800 64,800  64,800   0
3行目  50,000  4,000 54,000
4行目  30,000  2,400 32,400  
5行目  50,000  4,000 54,000
6行目  35,000  2,800 37,800
7行目  30,000  2,400 32,400
8行目  25,000  2,000 27,000
9行目    0
10行目    0

入金金額が0の場合、2行目をくりあさせて、下の行を1行づつ繰り上げたいのです。入金金額がない場合があります。差額が0ではなくなります。そのときはfor
nextから抜けたいのですが?よろしくお願いします。

【80452】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 20:23 -

引用なし
パスワード
   ▼ノンボ さん:

>サンプルのコードです。

申し訳ありません。これを最後にさせてください。

手作業でなら、どういう手順になるかを
箇条書きで説明お願いしています。
「かわりにコードを提示しているでしょう」というのは勘弁してください。
日本語に翻訳してください。

また、実行前と実行後の結果の例を提示してください。
これについてもお願いします。

'----

さっさと回答してよとお思いなら遠慮なくいってください。
他にも回答者はいますので安心してよいです。

【80453】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/16(土) 20:26 -

引用なし
パスワード
   なぜ説明がりかいできないのか解りません?

【80454】Re:行のデータをクリアして1行づつ繰り上...
発言  マナ  - 19/2/16(土) 21:02 -

引用なし
パスワード
   ▼ノンボ さん:
>なぜ説明がりかいできないのか解りません?

そうですか。ここまでにします。
お役に立てなくて、ごめんなさい。


   

【80455】Re:行のデータをクリアして1行づつ繰り上...
質問  ノンボ  - 19/2/16(土) 21:27 -

引用なし
パスワード
   1行目 本体金額  税額 合計金額 入金金額 差額
2行目  60,000  4,800 64,800  64,800   0
3行目  50,000  4,000 54,000
4行目  30,000  2,400 32,400  
5行目  50,000  4,000 54,000
6行目  35,000  2,800 37,800
7行目  30,000  2,400 32,400
8行目  25,000  2,000 27,000
9行目    0
10行目    0

タイトル行の列それぞれ結合されています。本体金額(B〜F),税額(G〜J),入金金額(K〜P),差額(U〜W). 税額、入金金額、差額には数式が入っています。
入金金額により差額が0かそうでないかを判断し、2行目から10行目までのフォーマットを崩さずに、0の場合は、行を1行ずつ繰り上げていきます。0でない場合はデータをそのままにしたく、下記コード書きました。
Sub Test5()
  Dim i As Integer, j As Integer
  j = 1
  For i = 2 To 10
  If (Range("U" & i).Rows) = 0 Then
    Rows(i).ClearContents
  End If
  If (Range("B" & i).Rows <> "") Then
    j = j + 1
    Rows(i).Copy Rows(j)
    Rows(i) = ""
  End If
  Next i
End Sub

 0の場合はうまくいきますが、差額が0でない場合は、セルの結合が解除されデータが全て消えてしまいます。セルの数式も残したいのですが、可能でしょうか。
いろいろ調べたり、試したりしましたがうまくいきません。
どのように編集すればよいかご教授ください。

【80459】Re:行のデータをクリアして1行づつ繰り上...
発言  γ  - 19/2/16(土) 22:23 -

引用なし
パスワード
   合計金額というのはどの列にあるんですか?

> 入金金額により差額が0かそうでないかを判断し、
> 2行目から10行目までのフォーマットを崩さずに、
> 0の場合は、行を1行ずつ繰り上げていきます。
> 0でない場合はデータをそのままにしたく、
ここの操作を箇条書きにして提示してください。
特に、
行を1行ずつ繰り上げる
というところを手作業でやるとして、
正確に箇条書きしてください。

あなたのコードは間違っている、
というか、想定していることと違う結果になるわけだから、
そのコードは参考にできないのです。
間違っているもので説明したことにするのは余りに大胆です。

【80467】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/17(日) 8:18 -

引用なし
パスワード
   ▼γ さん:
>合計金額というのはどの列にあるんですか?
>
>> 入金金額により差額が0かそうでないかを判断し、
>> 2行目から10行目までのフォーマットを崩さずに、
>> 0の場合は、行を1行ずつ繰り上げていきます。
>> 0でない場合はデータをそのままにしたく、
>ここの操作を箇条書きにして提示してください。
>特に、
>行を1行ずつ繰り上げる
>というところを手作業でやるとして、
>正確に箇条書きしてください。
>
>あなたのコードは間違っている、
>というか、想定していることと違う結果になるわけだから、
>そのコードは参考にできないのです。
>間違っているもので説明したことにするのは余りに大胆です。

説明がうまくなく申し訳ありません。
本体金額はB〜F列、税額はG〜J列、合計金額がK〜P列、入金金額はQ〜T列
差額はU〜W列、それぞれセルが結合されています。
月ごとに売上金額があります。毎月入金金額が2〜5行目の入金金額欄(Q〜T)列に入力されます。入金金額が合計金額と一致したら差額は0になりますが、合計金額と一致しない場合差額が生じます。差額が0か0でないか判断して、0のばあいはその行をクリアさせて、下の行を1行づつ繰り上げてコピーしたいのです。0ない場合はクリアさせないでそのままにしたいです。行を1行ずつ繰り上げるのを手作業でおこないますと1行ずつコピーして貼り付けます。それを自動化させたいのです。
下記フォーマットの表をあらためて表示します。

A列   B〜F列 G〜J列 K〜P列  Q〜T列  U〜W列                     
月    本体金額  税額  合計金額  入金金額  差額
3月    60000    4800  64800    64800    0
4月    50000    4000  54000    54000    0
5月    30000    2400  32400    32400    0
6月    50000    4000  54000    54000    0
7月    35000    2800  37800    37800    0
8月    30000    2400  32400      0   32400
9月    25000    2000  27000
10月    50000    4000  54000
11月    40000    3200  43200

よろしくお願いします。

【80468】Re:行のデータをクリアして1行づつ繰り上...
発言  γ  - 19/2/17(日) 8:47 -

引用なし
パスワード
   それでは、あなたのコードをステップ実行してみてください。
F8キーを押しながら1行ずつ実行するものです。
どこで想定と違うことが起きているのか、
原因を調べてみて下さい。
# こうした作業をデバッグといいますが、
# コード作成と一体になるものです。

【80469】Re:行のデータをクリアして1行づつ繰り上...
発言  ノンボ  - 19/2/17(日) 9:47 -

引用なし
パスワード
   ▼γ さん:
>それでは、あなたのコードをステップ実行してみてください。
>F8キーを押しながら1行ずつ実行するものです。
>どこで想定と違うことが起きているのか、
>原因を調べてみて下さい。
># こうした作業をデバッグといいますが、
># コード作成と一体になるものです。

γさん返信ありがとうございます。
言われたようにコードを実行してみましたら、end ifの前のRows(i)=""でフォーマットで不具合が生じました。Next iまですべて実行するとフォーマットのセルが解除されて、データが消えてしまいます。どのように編集すればよろしいでしょうか。

【80472】Re:行のデータをクリアして1行づつ繰り上...
発言  γ  - 19/2/17(日) 11:00 -

引用なし
パスワード
   フォーマットの不具合ってどういうことですか?

(1)結合セルはできるだけ使わないようにしたほうがよいです。
  (直ぐには対応できないかもしれないが)
(2)0と比較するところでは、空白と0を比較すると Trueになるのでは?
  IsEmpty関数を調べて下さい。

そのほか、
Range("U" & i).Rowsの .Rowsというものの意味が不明です。不要です。
Range("U" & i).Valueでよいのでは?

出掛けますので、しばらく反応できません。

【80474】Re:行のデータをクリアして1行づつ繰り上...
お礼  ノンボ  - 19/2/17(日) 11:35 -

引用なし
パスワード
    ありがとうございました。

 いろいろ教えていただきまして助かりました。あとは自分で努力してみます。
 すみませんでした。

【80476】Re:行のデータをクリアして1行づつ繰り上...
回答  ピンク  - 19/2/17(日) 18:53 -

引用なし
パスワード
   参考に
Sub Test6()
  Dim myRow As Long, i As Long, j As Long
  myRow = 2: j = 9
  Do Until myRow > 10
    If Cells(myRow, "B").Value = 0 Or Cells(myRow, "B").Value = "" Then
      myRow = myRow + 1
    ElseIf Cells(myRow, "B").Value > 0 And Cells(myRow, "U").Value > 0 Then
      myRow = myRow + 1
    ElseIf Cells(myRow, "U").Value = 0 Or Cells(myRow, "U").Value = "" Then
      For i = myRow To j
        Cells(i + 1, 1).Resize(, 23).Copy Cells(i, 1)
      Next
      Cells(j + 1, 1).Resize(, 23).ClearContents
      Cells(j + 1, "G").FormulaR1C1 = "=RC[-5]*8%"
      Cells(j + 1, "K").FormulaR1C1 = "=RC[-9]+RC[-4]"
      Cells(j + 1, "U").FormulaR1C1 = "=RC[-10]-RC[-4]"
      j = j - 1
    End If
  Loop
  MsgBox "終わり"
End Sub

【80479】Re:行のデータをクリアして1行づつ繰り上...
お礼  ノンボ  - 19/2/17(日) 20:39 -

引用なし
パスワード
   ▼ピンク さん:
>参考に
>Sub Test6()
>  Dim myRow As Long, i As Long, j As Long
>  myRow = 2: j = 9
>  Do Until myRow > 10
>    If Cells(myRow, "B").Value = 0 Or Cells(myRow, "B").Value = "" Then
>      myRow = myRow + 1
>    ElseIf Cells(myRow, "B").Value > 0 And Cells(myRow, "U").Value > 0 Then
>      myRow = myRow + 1
>    ElseIf Cells(myRow, "U").Value = 0 Or Cells(myRow, "U").Value = "" Then
>      For i = myRow To j
>        Cells(i + 1, 1).Resize(, 23).Copy Cells(i, 1)
>      Next
>      Cells(j + 1, 1).Resize(, 23).ClearContents
>      Cells(j + 1, "G").FormulaR1C1 = "=RC[-5]*8%"
>      Cells(j + 1, "K").FormulaR1C1 = "=RC[-9]+RC[-4]"
>      Cells(j + 1, "U").FormulaR1C1 = "=RC[-10]-RC[-4]"
>      j = j - 1
>    End If
>  Loop
>  MsgBox "終わり"
>End Sub

ピンクさん、参考のコードをかいていただきましてたいへんありがとうございました。とてもうまくいきました。もっと勉強するように努力します。
本当にありがとうございました。

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