Excel VBA質問箱 IV

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

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


1125 / 13645 ツリー ←次へ | 前へ→

【76188】B列とC列と同じ値をA列→C列にして特定する文字の横のセルに表示 マルク 14/10/12(日) 1:51 質問[未読]
【76189】Re:B列とC列と同じ値をA列→C列にして特定... 独覚 14/10/12(日) 7:48 発言[未読]
【76190】Re:B列とC列と同じ値をA列→C列にして特定... 独覚 14/10/12(日) 7:58 発言[未読]
【76191】Re:B列とC列と同じ値をA列→C列にして特定... マルク 14/10/12(日) 10:12 お礼[未読]

【76188】B列とC列と同じ値をA列→C列にして特定す...
質問  マルク  - 14/10/12(日) 1:51 -

引用なし
パスワード
   1つのシートに羅列しているID番号のデータがあります            
B列とC列が関連として括られて表示されています。            
やりたいことはC列の親管理番号をA列のID番号に置き換えて
(C8をA8 C14をA14へ置き換えして)            
D列に管理と書いてあるセルの左横(場所でいうとC22.C23.C27.C28,C31.C32)            
に値を置き換えたいのですが、マクロで自動処理させることは可能でしょうか?            

最初、A列のデータをコピーしてC列に貼り付けた後、
一般と管理が含まれている横のセルを空白にするマクロを実行して
そうするとC列に置き換えた親ID番号だけが残るので,あとは、
手動で管理と書かれている横のセルに貼り付ける作業をしていましたが

データ量が1万以上ある時もあるので、
マクロで効率のいい変換の仕方を模索しています。
(関数も試しましたが上記の条件を満たす関数は見つかりませんでした)
            
まとめると            
C列の親ID番号の親管理をA列のID番号に置き換えて            
置き換え後、管理と書かれている左横のセルに乗せたい            
            
説明だけで伝わりにくいかもしれませんが            
お力添えをお願いします。

参考で、置き換え前と置き換えあとのエクセルの内容と
一般と管理と含まれてる横のセルを空白にするマクロを記述しおきます。            
            

           置き換え前
1                 
2     A列       B列       C列      D列
3    ID番号     予備のID番号  親ID番号 管理別項目
4    00111222    00999888    00999888   一般
5    00111223    00999888    00999888   一般
6    00111225    00999888    00999888   管理
7    00111226    00999888    00999888   管理
8    00111227    00999888    00999888   親管理
9    00111229    00777666    00777666   一般
10    00111230    00777666    00777666   一般
11    00111231    00777666    00999888   管理
12    00111232    00777666    00999888   管理
13    00111233    00777666    00999888   管理
14    00111234    00888777    00888777   親管理
15    00111235    00888777    00888777   管理
16    00111236    00888777    00888777   管理

          置き換え後
1                
2     A列         B列     C列     D列
3    ID番号     予備のID番号  親ID番号 管理別項目
4    00111222    00999888             一般
5    00111223    00999888             一般
6    00111225    00999888    00111227    管理
7    00111226    00999888    00111227    管理
8    00111227    00999888             親管理
9    00111229    00777666              一般
10    00111230    00777666              一般
11    00111231    00777666    00111227    管理
12    00111232    00777666    00111227    管理
13    00111233    00777666    00111227    管理
14    00111234    00888777             親管理
15    00111235    00888777    00111234    管理
16    00111236    00888777    00111234    管理


Sub 管理空白()
For Each Rng In Selection
If Rng.Value = "管理" Then
Rng.Offset(, -1) = ""
End If
Next
End Sub

Sub 一般空白()
For Each Rng In Selection
If Rng.Value = "一般" Then
Rng.Offset(, -1) = ""
End If
Next
End Sub

【76189】Re:B列とC列と同じ値をA列→C列にして特...
発言  独覚  - 14/10/12(日) 7:48 -

引用なし
パスワード
   ▼マルク さん:
関数と一般機能を使う案だけれども。

E4セルに
=IF(D4<>"管理","",INDEX(A$4:A$20000,MATCH(1,INDEX((C$4:C$20000=C4)*(D$4:D$20000="親管理"),0),0)))
と入力して下へフィルコピー。

E4セルを選択した状態でShiftキーとCtrlキーを押しながら下矢印キーを押し、セルが
選択された状態でコピー。
C4セルを選択して形式を選択して貼り付けで値の貼り付けでどうでしょう?

なお、上の式はデータの最大が20000行までの場合なのでもっと多い場合は式の中の
20000の部分をもっと大きくしてください。

【76190】Re:B列とC列と同じ値をA列→C列にして特...
発言  独覚  - 14/10/12(日) 7:58 -

引用なし
パスワード
   あっ、今回の場合は式を
=IF(D4<>"管理","",LOOKUP(1,0/((C$4:C$20000=C4)*(D$4:D$20000="親管理")),A$4:A$20000))
でも。

【76191】Re:B列とC列と同じ値をA列→C列にして特...
お礼  マルク  - 14/10/12(日) 10:12 -

引用なし
パスワード
   独覚さんへ


教えていただいた関数で自分のやりたいことが出来ました!!
こういう多岐にわたる条件でも関数で処理出来ることに感銘です。
この関数を自動入力させてマクロで組んでみようと思います。
非常に助かりました。
ありがとうございます。


▼独覚 さん:
>あっ、今回の場合は式を
>=IF(D4<>"管理","",LOOKUP(1,0/((C$4:C$20000=C4)*(D$4:D$20000="親管理")),A$4:A$20000))
>でも。

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