「夫を成功」へ導く妻の秘訣 座談会

こんにちは、エクセル365を使っています。

一人では解決出来ない事が出てきましたので、教えて頂けませんか?

以下のようなデータがあります。

条件に従い、R列の文字と、S列の文字の組み合わせをU列とV列に転記したいと思います。

基本情報として、元データは必ずR列か、S列、どちらかにしか入りません。

STEP 1
まずは、R列が先頭に来る場合の組み合わせをU列に上から順に転記します。

この時、R列の行より、S列の行のほうが下にあるものだけを組み合わせ、下行と上行の組み合わせは無視します。

STEP 2
次に、S列が先頭に来る場合の組み合わせをV列に上から順に転記します。

先ほどと同様に今度はS列の行より、R列の行のほうが下にあるものだけを組み合わせ、下行と上行の組み合わせは無視します。

************
ここから画像2です

STEP3
次に合成した文字列と特別措置例の列の文字と同じもののみ、列を入れ替えます。
(U列にあればV列に、V列にあればU列に)

但し、入れ替える時に条件があります。

例として挙げると、U列にaaabbbがあり、特別措置の列にaaabbbとあった場合、bbbaaaと入れ替えてV列に転記します。
それがV列にあった場合はU列に転記します。
(黄色で囲ったものがそれに該当する例です)

※特別措置例のに記載される文字パターンの行数は30行程度になります。
また、ボタンクリックではなく、元データが変更された瞬間に再表示してくれるものが希望です。

工程は以上です、詳しい方どうぞよろしくお願い致します。

「エクセル マクロ? VBA? かなり難し」の質問画像

質問者からの補足コメント

  • どう思う?

    STEP 3 の画像です

    「エクセル マクロ? VBA? かなり難し」の補足画像1
      補足日時:2020/09/20 16:21
  • どう思う?

    補足です

    元データはR,Sに存在し、どちらか片方にしか出現しません。

    また元データが書き換わった場合、R列、S列ともに一旦クリアして再計算する事が希望です。

    「エクセル マクロ? VBA? かなり難し」の補足画像2
      補足日時:2020/09/21 02:36
  • うれしい

    面倒な質問に回答頂き、本当にりがとうございました。

    お陰様で、希望通り動いています。

    考えて頂き、ありがとうございます!

    No.5の回答に寄せられた補足コメントです。 補足日時:2020/09/21 19:28
  • HAPPY

    疑問点を抽出して頂き、ありがとうございます。

    おかげさまで正しい回答を得る事が出来ました。

    ありがとうございました!

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/09/21 19:29

A 回答 (5件)

#4です。


>基準に昇順に並ぶと言う事です
eeecccが気になりますが、そういう事で一応サンプル
簡単なマクロは分かるとの事なので、使い勝手は直してくださいね。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("R17:S50")) Is Nothing Then
Dim i As Integer, j As Integer, js As Integer
Range("V17:U50").ClearContents
For i = 17 To 50
If Cells(i, "R") <> "" Then
For j = i To 50
If Cells(j, "S") <> "" Then
If Application.CountIf(Range("X17:X50"), Cells(i, "R") & Cells(j, "S")) > 0 Then
Cells(Cells(Rows.Count, "V").End(xlUp).Row + 1, "V") = Cells(j, "S") & Cells(i, "R")
Else
Cells(Cells(Rows.Count, "U").End(xlUp).Row + 1, "U") = Cells(i, "R") & Cells(j, "S")
End If
End If
Next
End If
If Cells(i, "S") <> "" Then
For js = i To 50
If Cells(js, "R") <> "" Then
If Application.CountIf(Range("X17:X50"), Cells(i, "S") & Cells(js, "R")) > 0 Then
Cells(Cells(Rows.Count, "U").End(xlUp).Row + 1, "U") = Cells(js, "R") & Cells(i, "S")
Else
Cells(Cells(Rows.Count, "V").End(xlUp).Row + 1, "V") = Cells(i, "S") & Cells(js, "R")
End If
End If
Next
End If
Next
Call Range("U17:U50").Sort(Key1:=Range("U17"), Order1:=xlAscending)
Call Range("V17:V50").Sort(Key1:=Range("V17"), Order1:=xlAscending)
End If
End Sub

やっつけ感ありですが、希望道理に動けばよいのですが、、
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

おはようございます。

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

ちょっと頑張ってみます、ありがとうございます!

お礼日時:2020/09/21 07:49

こんばんは、


普通に条件で詰めれば良さそうですが、
1つその条件が解りません。
STEP 3 の移動する条件は何ですか?R列要素S列要素が入れ替わるのは
理解できますが、bbbaaaに変更した値がV列2行目に移動するのはどのような条件でしょうか?
eeeccc,hhhfff,fffaaaの移動する条件(行の移動)も示してください。
その場で入れ替えるだけなら簡単なんだけど、、おしえて?

似たようなご質問を見かけていましたが、ご自身でどの程度作り試したのかな?
>また、ボタンクリックではなく、元データが変更された瞬間に再表示してくれるものが希望です。
とあるのでその方向で作っていると言う事ですか?であれば、元データとはS列R列かな?だとしたら、先に出力されているデータの処理をどうするかな
    • good
    • 0
この回答へのお礼

こんばんは、考えて頂きありがとうございます。

下の方のお礼には書いたのですが、反対の列に移動した場合、その時点でそこに既にデータがあると思います。

そこにデータがあった場合、全ての列を1行下げて空白を作り、その空白セルに転記すします。

結果的に接続した文字列は、U列の上段から頭の三文字を基準に昇順に並ぶと言う事です、頭三文字の昇順とは17行目の3文字が頭に来る場合が一番最初で、24行目の3文字が頭に来る場合、一番下にと言う風です。

繰り返しになりますが、R列、S列に振り分けられた後は、列単位で考え最初の三文字を参考に昇順に並べ替えると言う意味と同義です。

eeeccc,hhhfff,fffaaaの移動する条件も同じで上記の例と同じですが、行を無視して列の最下行に転記して、それから頭3文字を参考に列内で上下のみ考えて並べ替えるとの同義です。

>>ボタンクリックではなく、元データが変更された瞬間に再表示してくれるもの
こちらは前回考えて下さった方がボタンクリックでの回答を下さっていたので注記として書きました、自分では簡単なマクロしか解らないので質問させて頂きました。

補足にて追加の画像を添付致します。

以上、回答になっていますでしょうか?
よろしくお願い致します。

お礼日時:2020/09/21 02:33

最初の値:aaabbb についてですと、列を入れ替え行を入れ替えるとがぞうのようになるのでは?とお味噌が思ってしまいます。

「エクセル マクロ? VBA? かなり難し」の回答画像3
この回答への補足あり
    • good
    • 0
この回答へのお礼

ああ、なるほどです。

入れ替えると言うのは、出来上がった行を入れ替えると言うのではなく、その該当する文字列だけ、反対の列に動かすと言う意味です。

該当する行の左右を入れ替えるのではありません。

また、入れ替えた行以下にある文字列を全て1行下げて画像2のように表示させると言う意味でした。

解りにくくてすみません><

お礼日時:2020/09/21 00:10

>その特別措置に合致しているセル内容の前後を入れ替え



どこのセルなのだろう?
多分業務でやっていれば理解・作成できるのでしょうが、やっぱり初級レベルでは厳しいですね。
VBA以前の問題として。

ベテラン回答者さんの回答を見て勉強したい位。
    • good
    • 0
この回答へのお礼

メッセージありがとうございます。

>>>どこのセルなのだろう?

要は画像1の状態から、画像2の特別措置と合致するものを例に倣って並べ替えるだけですよ。

お礼日時:2020/09/20 23:36

個人的にはSTEP3の意味が不明。



今回はダミーなので aaabbb とかになっているのでしょうけど、実際のデータで使用できるのかどうかによっては無駄足にもなりかねないと感じますが、そこは検証した上での羅列なのでしょうか?

>例として挙げると、U列にaaabbbがあり、特別措置の列にaaabbbとあった場合、bbbaaaと入れ替えてV列に転記します。

bbbaaa ってどこから出てきたのでしょう?
STEP1・2からいけばそのデータはあり得ないはずと思います。
aaabbb を逆にした訳ではないのですよね?

また2番目の画像では aaabbb が消えてますし。。。何故?

と疑問は書いてみましたがOfficeを壊しているので解決はできませんけども・・・・・・・
    • good
    • 0
この回答へのお礼

こんばんは、コメントありがとうございます。

bbbaaaはもともとU列にaaabbbとして存在し、その文字列が特別措置のaaabbbに合致しているので、aaabbbをbbbaaaと逆転し、R列からS列に転記と言う事です。

STEP3はその特別措置に合致しているセル内容の前後を入れ替え、さらに列も入れ替える工程です。

お礼日時:2020/09/20 22:19

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング