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

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

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

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

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

Q&A

解決済

1回答

1224閲覧

Python3のライブラリOpenPyXLを使い、ある要素を入力してひとつの要素を取り出したい

rikkkk

総合スコア8

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

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

0グッド

0クリップ

投稿2020/10/21 07:02

編集2020/10/21 07:56

[https://gammasoft.jp/blog/excel-vlookup-by-python/#search-id]
上記のサイトを参考にして社員IDを入力したときに名前だけを出力させるプログラムを作成したいのですがうまくいきません。

Python

1import openpyxl 2from pprint import pprint 3from operator import itemgetter 4 5# 社員リスト 6member_list = [] 7 8# エクセルファイルの取り込み 9wb = openpyxl.load_workbook("./company_members.xlsx") 10ws = wb["社員名簿"] 11for row in ws.iter_rows(min_row=2): 12 values = [] 13 for c in row: 14 values.append(c.value) 15 member_list.append(tuple(values)) 16 17# 社内資格保有者の社員ID 18masters_id = ["008", "017", "020"] 19 20# 検索 -> 表示 21masters = [] 22for member in member_list: 23 if member[0] in masters_id: 24 masters.append(member) 25 26pprint(masters)

上記のソースコードの
for c in row:
values.append(c.value)
member_list.append(tuple(values))
をいじればいいのはなんとなくわかるのですが、どのように変えれば名前のみを出力させることができるのかがわかりません。

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

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

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

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

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

meg_

2020/10/21 07:52

リンクは「リンクの挿入」で記入してください。
guest

回答1

0

ベストアンサー

以下の様に取り出せば良いです。

python

1masters = [] 2for member in member_list: 3 if member[0] in masters_id: 4 masters.append(member[1]) 5 6pprint(masters)

投稿2020/10/21 07:49

編集2020/10/22 02:45
nto

総合スコア1438

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

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

rikkkk

2020/10/21 07:58

エクセルファイルは実行ファイルと同じディレクトリに保存されています。 上記のファイルを実行した結果 [('008', '柳田愛結', '女', '総務部', 48, 30), ('017', '大友純', '女', '開発部', 35, 11), ('020', '中山勇一', '男', '営業部', 32, 10)] このようになると思うのですが、この出力の名前の部分だけを出力させたいのですが、わからないです。
nto

2020/10/22 02:48

昨日の回答を編集致しました。ご確認ください。 恐らくは掲載されていたサイトのコードをコピペしただけでしょうが コード内で実行されている流れなどはご理解されていらっしゃいますでしょうか。 質問者様の知見がどの程度のものなのかがわからず解説出来ずにおります。。。
rikkkk

2020/10/22 09:52

プログラミング初学者なためコードを100%理解しておらず、大変ご迷惑をおかけしました。 回答いただいたコードで目的としていた出力になったのでとても助かりました。 ありがとうございました。
nto

2020/10/22 10:18

掲題のコードは 1.内部的にエクセルファイルを読み込み 2.エクセルファイルの[社員名簿]というシートを指定 3.指定したシート内のデータを1行ずつリストに格納 4.リストの中を1件ずつ確認 5.1件ずつ確認していく中で、masters_idリストに含まれるIDのデータがあったらそのデータをmastersリストにコピー 6.処理が終わったらコピーしたデータを出力 という以上の流れになっております。 データには[ID,名前,性別,部署,年齢,勤続年数]と複数のデータが格納されており 通常pythonでは数を数える際0,1,2,3,4と0から数を数え始めます。 0番目がID、1番目が名前、2番目が性別..となる為 1件ずつデータを確認していく中で、対象のデータが見つかった場合には masters.append(member[1])と1番目の名前をmasterリストにコピーしているという流れの動作となっております。 「まずは実践」というのは大事な事ですが、まずは大体でも構いませんので根本的なpythonのルールや仕組みを理解した上でコードを扱いましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問