Excel VBA質問箱 IV

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

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


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

【55506】結合セルへの自動入力 VBA初心者 08/5/9(金) 8:04 質問[未読]
【55507】Re:結合セルへの自動入力 ひげくま 08/5/9(金) 9:20 回答[未読]
【55510】Re:結合セルへの自動入力 VBA初心者 08/5/9(金) 9:52 お礼[未読]

【55506】結合セルへの自動入力
質問  VBA初心者  - 08/5/9(金) 8:04 -

引用なし
パスワード
   独学で適当に作っているのでお恥ずかしいのですが…
以下の様なマクロを作成してみました。

1.A1〜A10のセルに1〜10の数字を入力。
2.セルB〜D、E〜G、H〜Jは"横方向に結合"されており、
3.例えばB1のセルを選択すると、そのセルには「1」が入力され、E4のセルを選択すると、
 そのセルには「4」が入力されます。
4.更にH4のセルを選択すると、E4のセルに入力されていた「4」がH4のセルに移動する。

…という感じの処理をさせようとしています。

頑張って以下のマクロを書いてみたのですが、このマクロでは、
□例えばE2:E5(セルが結合されているので実際にはE2:G5?)のセルを選択した時、
 選択セルの全てに「2」が入力されてしまいます。

これをそれぞれ「2」〜「5」を入力、又はE2セルに「2」のみ入力し、他のセルは変化
させないという風にするには、どうすれば良いでしょうか?

又、もし宜しければ、これ以外にもっとスマート(短い)なマクロがあればご教授
頂ければ…等と思います。

※セルが結合されていなければうまく動作するのですが、どうしても結合された
 状態で処理しなければならず、質問しております。

-------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a, b, i, j
With Target
For i = 1 To 10
 If ActiveCell.Address = "$B$" & i Then
  a = "$B$": b = 3
 ElseIf ActiveCell.Address = "$E$" & i Then
  a = "$E$": b = 6
 ElseIf ActiveCell.Address = "$H$" & i Then
  a = "$H$": b = 9
 End If
 For j = 5 To 8 Step 3
  If Cells(i, j) <> "" Then Exit For
 Next j
 If b = j Then End
 If ActiveCell.Address = a & i Then
  If Cells(i, j).Value <> "" Then
  .Value = Cells(i, j).Value
  Else
  .Value = Cells(i, 1).Value: End
  End If
  If ActiveCell.Address <> "$B$" & i Then
   Cells(i, j).FormulaR1C1 = ""
   End If
  Exit For
 End If
Next i
End With
End Sub

【55507】Re:結合セルへの自動入力
回答  ひげくま  - 08/5/9(金) 9:20 -

引用なし
パスワード
   > 1.A1〜A10のセルに1〜10の数字を入力。
> 2.セルB〜D、E〜G、H〜Jは"横方向に結合"されており、
> 3.例えばB1のセルを選択すると、そのセルには「1」が入力され、E4のセルを選択すると、
>  そのセルには「4」が入力されます。
> 4.更にH4のセルを選択すると、E4のセルに入力されていた「4」がH4のセルに移動する。
>
> …という感じの処理をさせようとしています。

1〜2は、マクロでの処理ではなくて、マクロを実行する段階でのシートの状態ですよね。

3で、 いきなり「例えば」と言われても、B1とE4を選択したときの処理しか解りません。それ以外のセルを選択したときはどういう処理をしたいのかが全然解りません。
入力される値が定数なのであれば、わざわざマクロで処理する必要はないと思いますけど。

もっと解りやすい説明をしましょう。

ということで、何をしたいのかがよく解っていない状態ですが、

> □例えばE2:E5(セルが結合されているので実際にはE2:G5?)のセルを選択した時、
> 選択セルの全てに「2」が入力されてしまいます。

に対しての回答をします。

>  .Value = Cells(i, 1).Value: End

の部分で2を入力しているわけですが、.Value は Target.Value で、選択範囲すべてのセルの値のことになります。
それに対し、Cells(i, 1).Valueは、1つのセルの値=1つの値になります。
ということで、複数のセルに同じ1つの値が入って当然、というわけですね。

やりたいことを実現するためには、
.Value = Cells(i, 1).Resize(.Count).Value
とすれば良いです。

【55510】Re:結合セルへの自動入力
お礼  VBA初心者  - 08/5/9(金) 9:52 -

引用なし
パスワード
   ▼ひげくま さん:
早速の回答ありがとうございます。
ご指摘の部分を変更したところ、うまく動作する様になりました。
本当にありがとうございました。

>もっと解りやすい説明をしましょう。
申し訳ありませんでした。今後、気を付けます。

>> 1.A1〜A10のセルに1〜10の数字を入力。
>> 2.セルB〜D、E〜G、H〜Jは"横方向に結合"されており、
>> 3.例えばB1のセルを選択すると、そのセルには「1」が入力され、E4のセルを選択すると、
>>  そのセルには「4」が入力されます。
>> 4.更にH4のセルを選択すると、E4のセルに入力されていた「4」がH4のセルに移動する。
>>
>> …という感じの処理をさせようとしています。
>
>1〜2は、マクロでの処理ではなくて、マクロを実行する段階でのシートの状態ですよね。
>
>3で、 いきなり「例えば」と言われても、B1とE4を選択したときの処理しか解りません。それ以外のセルを選択したときはどういう処理をしたいのかが全然解りません。
>入力される値が定数なのであれば、わざわざマクロで処理する必要はないと思いますけど。
>
>もっと解りやすい説明をしましょう。
>
>ということで、何をしたいのかがよく解っていない状態ですが、
>
>> □例えばE2:E5(セルが結合されているので実際にはE2:G5?)のセルを選択した時、
>> 選択セルの全てに「2」が入力されてしまいます。
>
>に対しての回答をします。
>
>>  .Value = Cells(i, 1).Value: End
>
>の部分で2を入力しているわけですが、.Value は Target.Value で、選択範囲すべてのセルの値のことになります。
>それに対し、Cells(i, 1).Valueは、1つのセルの値=1つの値になります。
>ということで、複数のセルに同じ1つの値が入って当然、というわけですね。
>
>やりたいことを実現するためには、
>.Value = Cells(i, 1).Resize(.Count).Value
>とすれば良いです。

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