Excel VBA質問箱 IV

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

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


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

【52357】結合セル ウッシー 07/11/10(土) 20:30 質問[未読]
【52359】Re:結合セル かみちゃん 07/11/10(土) 21:30 発言[未読]
【52360】Re:結合セル ウッシー 07/11/10(土) 21:57 質問[未読]
【52365】Re:結合セル かみちゃん 07/11/10(土) 23:56 発言[未読]
【52370】Re:結合セル ウッシー 07/11/11(日) 12:13 お礼[未読]

【52357】結合セル
質問  ウッシー  - 07/11/10(土) 20:30 -

引用なし
パスワード
   Worksheets("名簿")のB列に入力した値とWorksheets("データ")のA列の値を比較
して、Worksheets("名簿")にコピーし作業員名簿を作成しています。

Worksheets("名簿")
  A  B C D   E     F
1       雇入年月日
2  氏名   経験年数
3
4
5
6

結合セル
 B列 B3.B4.B5.B6
 E列 E3.E4 と E5.E6
以下同様のパターンで繰り返します。

Worksheets("データ")
  A  B  C  D   E     F
1  氏名     雇入年月日 経験年数
2
3

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim x As Variant
  Dim Ws As Variant
  
  Set Ws = Worksheets("データ")
  With Target
    If .Column <> 2 Then Exit Sub
    If .Row < 3 Then Exit Sub
    If .Count > 1 Then Exit Sub
  End With
  With Application
    .EnableEvents = False
    x = .Match(Target.Value, Ws.Range("A:A"), 0)
  End With
  With Target
    On Error Resume Next
    .Resize(, 4).Value = Ws.Cells(x, 2).Resize(, 4).Value
    .Offset(2, 3).Value = Ws.Cells(x, 6).Value
    On Error GoTo 0
  End With
  Application.EnableEvents = True
End Sub

上記のマクロを実行した所、E5.E6結合セルに経験年数がコピーされません。
作業員名簿の表は業界統一様式の為変更も出来ず、苦慮しております。
宜しくお願いいたします。

【52359】Re:結合セル
発言  かみちゃん  - 07/11/10(土) 21:30 -

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

>Worksheets("名簿")のB列に入力した値とWorksheets("データ")のA列の値を比較
>して、Worksheets("名簿")にコピーし作業員名簿を作成しています。
>
>Worksheets("名簿")
>  A  B C D   E     F
>1       雇入年月日
>2  氏名   経験年数
>3
>4
>5
>6
>
>結合セル
> B列 B3.B4.B5.B6
> E列 E3.E4 と E5.E6
>以下同様のパターンで繰り返します。
>
>Worksheets("データ")
>  A  B  C  D   E     F
>1  氏名     雇入年月日 経験年数
>2
>3

Worksheets("データ")の「経験年数」は、F列ですか?
質問文とシートレイアウトが違うような気がします。

>上記のマクロを実行した所、E5.E6結合セルに経験年数がコピーされません。

サンプルデータと期待している結果を提示することはできませんか?

【52360】Re:結合セル
質問  ウッシー  - 07/11/10(土) 21:57 -

引用なし
パスワード
   かみちゃんさん 今晩は

>Worksheets("データ")の「経験年数」は、F列ですか?
>質問文とシートレイアウトが違うような気がします。

Worksheets("データ")は一列のデータとなっていますので、F列です。

Worksheets("データ")のE2 → Worksheets("名簿")のE3.E4結合セルに
Worksheets("データ")のF2 → Worksheets("名簿")のE5.E6結合セルに

作業員名簿の 表は4行 で データは1行 でと言う事です。

【52365】Re:結合セル
発言  かみちゃん  - 07/11/10(土) 23:56 -

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

>>Worksheets("データ")の「経験年数」は、F列ですか?
>>質問文とシートレイアウトが違うような気がします。
>
>Worksheets("データ")は一列のデータとなっていますので、F列です。

すみません、聞き方を間違えました。

>>Worksheets("名簿")のB列に入力した値とWorksheets("データ")のA列の値を比較
>>
>>Worksheets("データ")
>>  A  B  C  D   E     F
>>1  氏名     雇入年月日 経験年数
>>2
>>3

「データ」シートの「氏名」がA列ではなく、B列のような気がしていまして、
    .Resize(, 4).Value = Ws.Cells(x, 2).Resize(, 4).Value
というコードが「データ」シートのB列から横方向に4列分の値を設定しているような気がします。
特に、
.Resize(, 4).Value
は、「名簿」シートのB列から横方向に4列に値を設定しようとしていますが、
大丈夫ですか?
.Offset(, 1).Resize(, 4).Value
でもなさそうですし、
.Offset(, 1).Resize(, 3).Value = Ws.Cells(x, 3).Resize(, 3).Value
なのでしょうか?

>Worksheets("データ")のE2 → Worksheets("名簿")のE3.E4結合セルに
>Worksheets("データ")のF2 → Worksheets("名簿")のE5.E6結合セルに
>
>作業員名簿の 表は4行 で データは1行 でと言う事です。

これを解決するたには、
    .Offset(2, 3).Value = Ws.Cells(x, 6).Value
というコードを
    .Offset(, 3).MergeArea.Offset(1).Value = Ws.Cells(x, 6).Value
にしてみてください。

今回は、仕方なく結合セルを使いたいとのことですが、
結合セルとVBAの相性は悪いため、なるべくなら、使わないほうがいいかと思います。

【52370】Re:結合セル
お礼  ウッシー  - 07/11/11(日) 12:13 -

引用なし
パスワード
   かみちゃんさん お早うございます
返事が遅くなりまして申し訳ありません。

実際の所、表はもっと複雑です。A3の横でも一人のデータが入りきれず、やむなく結合セルを使用しています。

>これを解決するたには、
>    .Offset(2, 3).Value = Ws.Cells(x, 6).Value
>というコードを
>    .Offset(, 3).MergeArea.Offset(1).Value = Ws.Cells(x, 6).Value
>にしてみてください。
>
>今回は、仕方なく結合セルを使いたいとのことですが、
>結合セルとVBAの相性は悪いため、なるべくなら、使わないほうがいいかと思います。

御提示して頂いた上記のコードで無事解決致しました。
これから先、まだまだ問題が発生しそうです。
初めての投稿で要領も悪くお手数をかけました。
誠に有難うございました。

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