質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1569閲覧

エクセルで,リストから同じ列を判別してその列または何か値を抽出する方法

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2020/07/15 14:10

編集2020/07/16 01:57

Excel365にて,リストから同じ列を判別してその列または何か値を抽出する方法を探しています。

具体的には以下のように元の数字の羅列から全通りの組み合わせを作成します。

元データ 組み合わせを全通り作成 返り値用
0 0 0 0 0 0         0
1 1 1 0 0 1         1
2 2 2 0 0 2        2
3 3 3 0 0 3        3
4 4 4 0 0 4        4
5 5 5 0 0 5        5
6 6 6 0 0 6        6
7 7 7 0 0 7        7
8 8 8 0 0 8        8
9 9 9 0 0 9        9
(以下省略)

その後,別シートの 2 1 0 の組み合わせが,作成した組み合わせのどの位置にあるかをシート100枚ほど判別していきたいと考えています。

これをもとにクラスタリングを行っていくため,単純に上からの行番号が返ってきても,返り値用の値でも構いません。

シート数が多いのと,この作業がいくつかあるのでできれば自動化したいと考えていますが,手作業でもなにか良い方法はありませんでしょうか。

ご教示いただけますと幸いです。

(画像1)
イメージ説明

(画像2)
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/07/15 14:26

単純に組み合わせの数の羅列を足したものを識別子(クラスタリングの値)とするんじゃダメでしょうか? たとえば別シートの「2」と「1」と「0」の組み合わせは「210」という識別子に対応します。
退会済みユーザー

退会済みユーザー

2020/07/15 15:49

ありがとうございます。 それがこの組み合わせがシートによって変動し,4行~8行ほどありますので,組み合わせを新しく識別子にしたいのです,,,
can110

2020/07/15 22:34

どんな組み合わせ「a, b, c」であれ、識別子「abc」にできます。 目的を達するにあたって、何が、どの部分の処理が具体的に分からないでしょうか? ・複数のシートを列挙する方法、あるいは順番に処理する方法 ・シート内で組み合わせが格納されたセル範囲を知る方法 ・などなど
退会済みユーザー

退会済みユーザー

2020/07/16 00:03

すみません、先ほど意図を理解しておりませんでした。数字の羅列にすると言うことですね。なるほど。 わからないのはリストからシート内で組み合わせが格納された範囲を知る方法です。前者の処理も含めたマクロが書ければよいですが、複雑ですのでまずは後者を進めたい所存です。
aokikenichi

2020/07/16 00:13

PythonタグがありますがPythonコードでもよろしいでしょうか
radames1000

2020/07/16 00:48

サンプル画像はれませんか?元シートと別シートの。 別シートにどんな形で値が入力されているのか(列固定かフリーか等)知りたいです。 値は複数のセルにわかれているんですよね?(組み合わせは3~8桁の場合もあり?)
退会済みユーザー

退会済みユーザー

2020/07/16 01:49

aokikenichi様 pythonコードでも大丈夫です。助かります。お願い致します。
退会済みユーザー

退会済みユーザー

2020/07/16 02:00

radames様 画像2のB8C8D8のセルの値の組み合わせが,画像1のEFG列のどの位置にあるかを計算させたいです。 値は分かれています。組み合わせは(画像2)のB2の位置にあるAやBなどのカテゴリによっては全部で52万通りほどあるものもあります。
can110

2020/07/16 02:44

「値は分かれています。」以降の説明がよく分かりません。 E列以降もこの問題に関係してくるのでしょうか? (画像2)における対象の領域(組み合わせ)は「B8:D11」の「2 1 0」「0 0 0」「0 0 0」「0 0 0」 の4つでなないのでしょうか?
退会済みユーザー

退会済みユーザー

2020/07/16 02:49

組み合わせは3~8桁の場合とは組み合わせの数だと思い記述いたしました。 現状質問している問題ではおっしゃる通り「B8:D11」の「2 1 0」「0 0 0」「0 0 0」「0 0 0」 の4つです。 E列以降もまた別シートで参照していきますが,ひとまずやり方がわかれば適用していくだけなので。 わかりにくくさせてしまい,申し訳ないです。
sinzou

2020/07/16 03:39

画像1のABC列の値は、最大値が変動し、その桁の進数となるなら 画像2のB8C8D8の返り値は、 例)画像1("Sheet1")元データ各列の最大98までとする =D8+C8*(MAX(Sheet1!C2:C100)+1)+B8*(MAX(Sheet1!C2:C100)+1)*(MAX(Sheet1!B2:B100)+1) となりませんか?
退会済みユーザー

退会済みユーザー

2020/07/16 03:58

sinzou様 これでもいけました。ありがとうございます。
guest

回答2

0

ベストアンサー

Sheet2のB8C8D8からとる場合の数式サンプルです。

Excel

1=SUMPRODUCT((E:E=Sheet2!B8)*(F:F=Sheet2!C8)*(G:G=Sheet2!D8)*I:I)

ただし、すべて「数値」として考えております。

投稿2020/07/16 02:26

radames1000

総合スコア1925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/16 03:58

これでいけました。ありがとうございます。
guest

0

わからないのはリストからシート内で組み合わせが格納された範囲を知る方法です。

まず、別シートの組み合わせのある領域は、全シート共通で

  • 1行目から始まっている。あるいは1行目は見出し行で2行目から始まっている
  • 列の位置は共通で固定であり、たとえばACのように連続している

ものとします。すなわち組み合わせの入っている最終行位置だけ分かればよいものとします。
ExcelであればRange("A:C").End(xlDown).Rowで取得できます。
Pythonであればopenpyxlで取得できるエクセル表のセル範囲についてに記載あるように、シートの属性として取得できます。

投稿2020/07/16 00:31

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問