Excel VBA質問箱 IV

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

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


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

【61468】データの検索 まこすけ 09/5/12(火) 0:46 質問[未読]
【61469】Re:データの検索 りん 09/5/12(火) 3:37 回答[未読]
【61470】Re:データの検索 まこすけ 09/5/12(火) 6:57 発言[未読]
【61471】Re:データの検索 りん 09/5/12(火) 7:24 発言[未読]
【61476】Re:データの検索 まこすけ 09/5/12(火) 20:01 お礼[未読]

【61468】データの検索
質問  まこすけ  - 09/5/12(火) 0:46 -

引用なし
パスワード
    A  B  C           A  B  C  
1 11  E11           1 11  E11 E11
2 XX  22            2 XX  22  E11
3 XX              3 XX    E11
4                4
5 11              5 11    E11    
6                 6
7 11  E22           7 11  E22 E22    
8    33            8   33 
9 XX              9 XX    E22
10                10

E11= 列は固定・行は固定、頭にEが必ず付き、数字は変動します
E22= 列は固定・行は変動、頭にEが必ず付き、数字は変動します

A列のセルに何か入力されていたら、E11とE22をC列に書き出したいのです
膨大な量のデータの為、手作業だと時間がかかってしまいます
なんとかできないでしょうか?
助けて下さい

【61469】Re:データの検索
回答  りん E-MAIL  - 09/5/12(火) 3:37 -

引用なし
パスワード
   まこすけ さん、こんばんわ。

>  A  B  C           A  B  C  
>1 11  E11           1 11  E11 E11
>2 XX  22            2 XX  22  E11
>3 XX              3 XX    E11
>4                4
>5 11              5 11    E11    
>6                 6
>7 11  E22           7 11  E22 E22    
>8    33            8   33 
>9 XX              9 XX    E22
>10                10
>

>E11= 列は固定・行は固定、頭にEが必ず付き、数字は変動します
>E22= 列は固定・行は変動、頭にEが必ず付き、数字は変動します



>A列のセルに何か入力されていたら、E11とE22をC列に書き出したいのです
こういう事でしょうか?

Sub test()
  Dim r1 As Range
  Dim RR As Long, Rmax As Long, s1 As String
  'A列のデータ範囲
  With Application.ActiveSheet
   Set r1 = Application.Intersect(.Columns("A:A"), .UsedRange)
  End With
  '
  Rmax = r1.Count
  ReDim cdat(1 To Rmax, 1 To 1) As Variant
  '
  'B列にExxが出たら入れ替え?
  s1 = "E11" '一応初期値
  For RR = 1 To Rmax
   'A列に何か入ってたら
   If r1.Cells(RR).Value <> "" Then
     'B列がExxだったら入れ替え?
     With r1.Cells(RR).Offset(0, 1)
      If Left(.Text, 1) = "E" Then s1 = .Text
     End With
     'C列に入れる文字列
     cdat(RR, 1) = s1
   End If
  Next
  '一括で範囲に渡す。
  r1.Offset(0, 2).Value = cdat()
  '
  Erase cdat
  Set r1 = Nothing
End Sub

【61470】Re:データの検索
発言  まこすけ  - 09/5/12(火) 6:57 -

引用なし
パスワード
   りんさん
おはようございます

さっそく試してみたのですが、全てE11になってしまいました。
E22のある行からは、E22にしたいのです。


>>  A  B  C           A  B  C  
>>1 11  E11           1 11  E11 E11
>>2 XX  22            2 XX  22  E11
>>3 XX              3 XX    E11
>>4                4
>>5 11              5 11    E11    
>>6                 6
>>7 11  E22           7 11  E22 E22    
>>8    33            8   33 
>>9 XX              9 XX    E22
>>10                10
>>
>
>>E11の場所は、B1に必ずある
>>E22は、何行目にあるかは、毎回変わってしまいます。
> Eの後の数字も毎回変わってしまう
 
 説明不足申し訳ありません。
>
>
>>A列のセルに何か入力されていたら、E11とE22をC列に書き出したいのです
>こういう事でしょうか?
>
>Sub test()
>  Dim r1 As Range
>  Dim RR As Long, Rmax As Long, s1 As String
>  'A列のデータ範囲
>  With Application.ActiveSheet
>   Set r1 = Application.Intersect(.Columns("A:A"), .UsedRange)
>  End With
>  '
>  Rmax = r1.Count
>  ReDim cdat(1 To Rmax, 1 To 1) As Variant
>  '
>  'B列にExxが出たら入れ替え?
>  s1 = "E11" '一応初期値
>  For RR = 1 To Rmax
>   'A列に何か入ってたら
>   If r1.Cells(RR).Value <> "" Then
>     'B列がExxだったら入れ替え?
>     With r1.Cells(RR).Offset(0, 1)
>      If Left(.Text, 1) = "E" Then s1 = .Text
>     End With
>     'C列に入れる文字列
>     cdat(RR, 1) = s1
>   End If
>  Next
>  '一括で範囲に渡す。
>  r1.Offset(0, 2).Value = cdat()
>  '
>  Erase cdat
>  Set r1 = Nothing
>End Sub

【61471】Re:データの検索
発言  りん E-MAIL  - 09/5/12(火) 7:24 -

引用なし
パスワード
   まこすけ さん、おはようございます

>さっそく試してみたのですが、全てE11になってしまいました。
>E22のある行からは、E22にしたいのです。
B列がE**のときに入れ替わるようにしていますが、もしかしてE**出現時のAがカラということがあるのでしょうか。
上のデータで試した時は正しく入っていたので、半角+空白抜き追加してみます。

>>Sub test()
>>  Dim r1 As Range
>>  Dim RR As Long, Rmax As Long, s1 As String
>>  'A列のデータ範囲
>>  With Application.ActiveSheet
>>   Set r1 = Application.Intersect(.Columns("A:A"), .UsedRange)
>>  End With
>>  '
>>  Rmax = r1.Count
>>  ReDim cdat(1 To Rmax, 1 To 1) As Variant
>>  '
>>  'B列にExxが出たら入れ替え?
>>  s1 = "E11" '一応初期値
>>  For RR = 1 To Rmax
    'B列をチェック
    With r1.Cells(RR).Offset(0, 1)
      If StrConv(Left(Trim(.Text), 1), vbNarrow) = "E" Then _
       s1 = StrConv(Trim(.Text), vbNarrow) 'E**なら入替え
    End With
>>   'A列に何か入ってたら
>>   If r1.Cells(RR).Value <> "" Then
>>     'C列に入れる文字列
>>     cdat(RR, 1) = s1
>>   End If
>>  Next
>>  '一括で範囲に渡す。
>>  r1.Offset(0, 2).Value = cdat()
>>  '
>>  Erase cdat
>>  Set r1 = Nothing
>>End Sub

【61476】Re:データの検索
お礼  まこすけ  - 09/5/12(火) 20:01 -

引用なし
パスワード
   りんさん、遅くなってしまい申し訳ありません

試してみた所、大成功です
本当に感謝です
助けていただきありがとうございます。

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