Excel VBA質問箱 IV

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

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


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

【14561】ある範囲に文字を入力させるには Yoko 04/6/1(火) 21:01 質問[未読]
【14564】Re:ある範囲に文字を入力させるには kuku 04/6/1(火) 22:58 回答[未読]
【14565】Re:ある範囲に文字を入力させるには ちゃっぴ 04/6/1(火) 23:05 回答[未読]
【14568】Re:ある範囲に文字を入力させるには Ron 04/6/1(火) 23:38 回答[未読]

【14561】ある範囲に文字を入力させるには
質問  Yoko  - 04/6/1(火) 21:01 -

引用なし
パスワード
   はじめまして。初心者です。

A1からE1(1行目の1列目から5列目)のどこかに1を入力するとします。
(下図の場合だと、B1に1が入力されていますが、入力されるセルは可変です。)
また,A3からE3(3行目の1列目から5列目)のどこかに3を入力するとします。
(下図の場合だと、E1に3が入力されていますが、入力されるセルは可変です。)
このとき、2行目に2を入力させるVBを作りたいのですが、1が入力されている列と3が入力されている列の間で、1及び3が入力されている列は含まずに、2行目に2を入力させたいのです。

どうか、知恵を貸してください。よろしくお願いします。

    A    B    C    D    E    ・・・・
1        1                
2             2    2        
3                      3    
4                        
5                        
:                        
:

【14564】Re:ある範囲に文字を入力させるには
回答  kuku  - 04/6/1(火) 22:58 -

引用なし
パスワード
   こんばんは。参考まで。

Sub test()

  Dim ix1 As Integer, ix2 As Integer
  Dim i As Integer
  
  For i = 1 To 5
    If Cells(1, i) = "1" Then
      ix1 = i
      Exit For
    End If
  Next i
  
  For i = 1 To 5
    If Cells(3, i) = "3" Then
      ix2 = i
      Exit For
    End If
  Next i
  
  If ix1 < ix2 And ix2 - ix1 > 1 Then
    Range(Cells(2, ix1 + 1), Cells(2, ix2 - 1)) = "2"
  ElseIf ix1 > ix2 And ix1 - ix2 > 1 Then
    Range(Cells(2, ix2 + 1), Cells(2, ix1 - 1)) = "2"
  End If

End Sub

もっと良い方法がいろいろあると思いますが。

【14565】Re:ある範囲に文字を入力させるには
回答  ちゃっぴ  - 04/6/1(火) 23:05 -

引用なし
パスワード
   For 〜 Next文でループカウンタの最大値、最小値を変数で与えてやれば出来ると思います。

サンプルの場合、列で見ますと
最小値 2
最大値 5
となりますので

Dim lngMinCol As Long
Dim lngMaxCol As Long
Dim i As Long, j As Long

lngMinCol = 最小値が入っているセル.Column + 1
lngMaxCol = 最大値が入っているセル.Column - 1

For j = lngMinCol To lngMaxCol
  Cells(i, j).Value = "2"
Next j

このような感じで、行に対してもループしてやれば出来るでしょう!
Do Loop文を使用したほうが2重ループにならないため、シンプルかも?

【14568】Re:ある範囲に文字を入力させるには
回答  Ron  - 04/6/1(火) 23:38 -

引用なし
パスワード
   こんばんは。
サンプルをもう一つ

Sub test()

  Dim Rng1 As Range
  Dim Rng3 As Range
  Dim TargetRng As Range
  Dim cnt As Long
  Set TargetRng = Range("a1:e5")
  Set Rng1 = TargetRng.Find(1)
  If Rng1 Is Nothing Then Exit Sub
  Set Rng3 = TargetRng.Find(3)
  If Rng3 Is Nothing Then Exit Sub
  cnt = Rng3.Column - Rng1.Column - 1
  If cnt < 1 Then Exit Sub
  Rng1.Offset(1, 1).Resize(, cnt).Value = 2

End Sub
お試しください。
では

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