プロが教えるわが家の防犯対策術!

こんにちは、表題の通り、指定したセルに他セルの番地(列)を表示させたいです。

具体的には画像のように赤で囲った枠部分を求めたいのですが、その枠内と同じ色のセルの列番地を表示させたいのです。

また、EZからのように後列にも同じ作業があるので、赤枠をコピペでFD34に貼り付け表2にも同じ事がやりたいです。

詳しい方、よろしくお願い致します。

「エクセル 他セルの列情報を取得」の質問画像

A 回答 (4件)

こんにちは


>これは普通に関数のように使えば良いのでしょうか?
ごめんなさい、誤解与えました。。
VBAでの処理上です。
表組みで 結合セル 1 2 3 ・・と示されているものが 
沢山あるのでしょうか

表組みに規則性があり、1 2 が一意の値であれば VBAで一気に処理するのはいかがでしょうか

参考サンプルですが該当範囲を念のため確認してください
結合セルを基準に考えました。同じ色が複数ある場合も考えてあります。
沢山あるようなので 1 2 を検索して基準範囲にしています

Sub ColorChk()
Dim Rng As Range, Rng2 As Range
Dim r As Range, rr As Range
Dim Ky, ary()
Dim n As Long, i As Long, j As Long
For Each Ky In Array("1", "2") '実際の基準結合セルの値
Set Rng = ActiveSheet.UsedRange.Find(What:=Ky, LookIn:=xlValues, LookAt:=xlWhole)
If Rng Is Nothing Then Exit Sub
ReDim ary(0 To 9): i = 0
For Each r In Rng(1).Resize(5, 2).Offset(8, 4)
If Not r.DisplayFormat.Interior.Color = 16777215 Then
n = 1
For j = 0 To 9
If ary(j) = r.DisplayFormat.Interior.Color Then n = n + 1
Next
For Each rr In Rng.MergeArea.Offset(1).Resize(2, 9)
If r.DisplayFormat.Interior.Color = rr.DisplayFormat.Interior.Color Then
If n > 0 Then n = n - 1
If n = 0 Then
r.Value = Split(rr.Address(1, 0), "$")(0)
ary(i) = r.DisplayFormat.Interior.Color: i = i + 1
Exit For
End If
End If
Next
End If
Next
Next
End Sub

Offset、Resizeで範囲を指定していますので
少し、分かり難いかも知れませんが、図の表組みに合わせてあります
1 2 ・・・が 同じ文字列+で見出しのような役割なら 配列文字でなく
findnextで回すのもありだと思います
    • good
    • 1
この回答へのお礼

ありがとう

こんにちは!
再回答頂き、ありがとうございます。

おかげさまで、大変な作業が大幅に短縮されました。
いつも教えてくださり助かります!

お礼日時:2022/03/17 15:56

横から失礼します


既にユーザー定義関数の回答が出ていますが、
条件書式で付けたセルの色がある場合、ユーザー定義関数では
DisplayFormat対応できないと思いますので
何かトリガーを設定してVBAで処理する方法になると思います。

試していませんが、テーマなどのカラー設定も想定できる場合は、
Interior.Color で比較する必要があるかも です。

A1形式の列文字だけを取得する場合、
=Split(セル.Address(0, 1), "$")(0)
のようにするのが簡単だと思います
    • good
    • 1
この回答へのお礼

解答ありがとうございます。

=Split(セル.Address(0, 1), "$")(0)

これは普通に関数のように使えば良いのでしょうか?

=Split(ACX328.Address(0, 1), "$")(0)
うーん。。。すみません

お礼日時:2022/03/16 02:16

No.1の者です。


一部、マクロを修正しましたので、こちらを使用して下さい。
対象セルが複数あった場合は、見付けた時点で処理を抜ける。
再計算させる様に、Application.Volatileを追加。

Function 同じ色のセルを返す(mySelRng As Range) As Variant
Application.Volatile
Dim myRng As Range
同じ色のセルを返す = CVErr(xlErrNA)
For Each myRng In mySelRng
If myRng.Interior.ColorIndex = Application.ThisCell.Interior.ColorIndex Then
同じ色のセルを返す = myRng.Address(False, False)
Exit Function
End If
Next
End Function
    • good
    • 1
この回答へのお礼

返事おそくなりすみません。

回答ありがとうございます。

対象範囲が恐ろしくたくさんあるのですが、ちょっと試してみたいと思います。

お礼日時:2022/03/16 02:14

おはようございます。



一般的な関数などでは、目的のセル情報を取得できないと思いますので、
VBAでユーザー定義関数を作成する方法の一例として載せておきます。

Function 同じ色のセルを返す(mySelRng As Range) As Variant
Dim myRng As Range
同じ色のセルを返す = CVErr(xlErrNA)
For Each myRng In mySelRng
If myRng.Interior.ColorIndex = Application.ThisCell.Interior.ColorIndex Then
同じ色のセルを返す = myRng.Address(False, False)
End If
Next
End Function

上記のユーザー定義関数を、標準モジュールに記載して、ファイル名の
拡張子を、xlsmとして保存。

その後、セル:ET41に、=同じ色のセルを返す(EP34:EW34) を入力。

http://mt-soft.sakura.ne.jp/kyozai/excel_mid/150 …

セルの選択範囲に同じ色が複数あった場合は、範囲の中の上や、左上に
あるセルが返りますので、範囲選択などで調整してみて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング