• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結合のループ処理のマクロ)

結合のループ処理のマクロについて

このQ&Aのポイント
  • 質問者は結合のループ処理のマクロを作成していますが、うまく機能していないようです。
  • マクロは、Sheet1のC列にデータがある場合、C列からF列までのデータをSheet2のC列に半角で結合するものです。
  • しかし、結合するときにエラーが発生しています。質問者はどこが問題か教えてほしいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

既に、すばらしい回答が出ていますが、質問者の勉強という事で捕捉します。 Sheet1!C7.Value & Sheet1!D7.Value & Sheet1!E7.Value & Sheet1!F7.Value 関数の記述の仕方です。VBAのコードではありませんよ。 activesell.Offset(0.1).Select スペルミス、点とカンマ、行と列の指定の間違い Activeなセルを一行ずつ下へずらすには ActiveCell.Offset(1, 0).Activate と記述します。 Do while を使ったLoopですが、出来るだけ今のコードを生かすとして Sub loop1() Dim i As Integer i = 7 Sheets("Sheet1").Range("c7").Select Do While ActiveCell.Value <> "" Worksheets("Sheet2").Range("c" & i).Value = Range("c" & i).Value i = i + 1 ActiveCell.Offset(1, 0).Activate Loop End Sub となります、セルの結合と半角への変換は無視しています。 まずは、これだけで、何を行っているかいるか理解してみてください。

y-kazu1962
質問者

お礼

親切なご指導ありがとうございます。

その他の回答 (4)

回答No.4

こんにちは。 ご質問のコードを見る限りは、まだ掲示板で質問する段階にはないように思います。 まず、VBEditor に書いてみて、赤い字が出た所を修正するようにしなければなりませんね。また、デバッグ--コンパイルをしたら、エラーが出ていないとか確認してください。 できるだけ、基本的な所を積み上げたほうがよいです。今の段階では、回答を貰っても、解説のないコードだけでは、全部は把握できないかもしれません。 '// Sub CombineData()  Dim ws2 As Worksheet  Dim LastRow As Long '最後の行  Dim i As Long  Dim v As Variant  Set ws2 = Worksheets("Sheet2")  With Worksheets("Sheet1")   LastRow = .Cells(Rows.Count, "C").End(xlUp).Row   For i = 7 To LastRow '7行目から    If .Cells(i, "C").Value <> "" Then     v = .Cells(i, "C").Value _        & .Cells(i, "D").Value _        & .Cells(i, "E").Value _        & .Cells(i, "F").Value     ws2.Cells(i, "C").Value = StrConv(v, vbNarrow) '半角    End If   Next i  End With  Set ws2 = Nothing End Sub

y-kazu1962
質問者

お礼

ありがとうございます

回答No.3

最後で間違った、、、ENDの直前、、、 (正) zSheet.Columns("C").AutoFit (誤) 省略

y-kazu1962
質問者

お礼

ありがとうございます

回答No.2

C列途中に空白がある場合、その行はスキップしている。Sheet1とSheet2の行位置は対応させているので、Sheet2の方を詰める場合は、nn = i、をコメントにする 最初にC列をクリアしている。問題があれば、zSheet.Columns("C").Clear、をコメントにする Option Explicit 'Sub loop1() Sub TheNextNew() Const xNum = 7 Dim i As Long Dim nn As Long Dim xLast As Long Dim xSheet As Worksheet Dim zSheet As Worksheet 'i = 1 'Sheets("Sheet1").Select Set xSheet = ThisWorkbook.Sheets("Sheet1") Set zSheet = ThisWorkbook.Sheets("Sheet2") zSheet.Columns("C").Clear xLast = xSheet.Cells(Rows.Count, "C").End(xlUp).Row 'xSheet.Range(Cells(7, "C"), Cells(xLast, "C")).Select 'Do While ActiveCell.Value <> "" nn = xNum For i = xNum To xLast 'Worksheets("Sheet2").Select 'Range("c7").Select 'Range("c7").Value = Asc.Sheet1!C7.Value & Sheet1!D7.Value & Sheet1!E7.Value & Sheet1!F7.Value If (xSheet.Cells(i, "C").Value <> Empty) Then nn = i zSheet.Cells(nn, "C").Value = StrConv(xSheet.Range("C" & i).Value & xSheet.Range("D" & i).Value & xSheet.Range("E" & i).Value & xSheet.Range("F" & i).Value, vbNarrow) nn = nn + 1 End If 'i = i + 1 'ActiveCell.Offset(0.1).Select 'Loop Next zSheet.Select zSheet.Rows(xNum).AutoFit End Sub

y-kazu1962
質問者

お礼

ありがとうございます。 大変勉強になりました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>どこが悪い シート名、セル番地のマクロの書き方が全然デタラメです。 作成例: sub macro1()  dim r as long  dim c as long  for r = 7 to worksheets("Sheet1").range("C6556").end(xlup).row   worksheets("Sheet2").cells(r, "C").clearcontents   if worksheets("Sheet1").cells(r, "C") <> "" then    for c = 3 to 6     worksheets("Sheet2").cells(r, "C") = worksheets("Sheet2").cells(r, "C") & worksheets("Sheet1").cells(r, c)    next c   end if  next r end sub

y-kazu1962
質問者

お礼

詳しい解答ありがとうございます

関連するQ&A

専門家に質問してみよう