Python Tutorial Excelから必要な値を取得!Colaboratory & GoogleDrive

1日3分で学ぶPythonの 1 〜 11 まで完了してたらできるはず。。

目次

設定

商品名と売り上げ金額が入ったシートから、700,000円以上の売り上げの商品と金額を取り出し、
新しいシートに書き込む。

Excelファイルは、乱数を使用しA列とB列に1,000行づつ作成。

A列の関数は、1列目に「商品名」2列目以降は下記関数で乱数を生成。

=MID(CHAR(RANDBETWEEN(48,57))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122)),RANDBETWEEN(1,3),1)
&MID(CHAR(RANDBETWEEN(48,57))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122)),RANDBETWEEN(1,3),1) &MID(CHAR(RANDBETWEEN(48,57))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122)),RANDBETWEEN(1,3),1)
&MID(CHAR(RANDBETWEEN(48,57))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(97,122)),RANDBETWEEN(1,3),1)

B列の関数は、1列目に「金額」2列目以降は下記関数で乱数を生成。

=RANDBETWEEN(1,1000000)

乱数生成後、セルをコピーして1,000行目までペーストしました!!

GoogleDriveからExcelファイルの読み込みに関しては、こちらから
if文に関してはこちらから
while文に関しては、こちらから

主要コードの説明

continue_num = 1
count = 2
branch_point = 700000

while count <= sheet_name.max_row:
  amount = sheet_name.cell(row=count,column=2).value

  if branch_point > amount:
    count += 1
    continue_num += 1
    continue
  product_name = sheet_name.cell(row=count,column=1).value
  over_buranch_point = sheet_name.cell(row=count,column=2).value
  str_count = str(count - continue_num)
  new_sheet["A"+str_count] = product_name
  new_sheet["B" +str_count] = over_buranch_point

  count += 1

解説

変数

continue_num = 1
count = 2
branch_point = 700000

<continue_num>
if文でcontinueした場合に、「continue_num」= continue した回数を「count」より差し引句ことにより、新しいシートに書き込む際に、セルの空白が出ないようにしている。

<count>
セルの2行目から(1行目はタイトルが入っている為)始まるように設定。

<branch_point>
振り分ける条件の金額設定。

<amount>
セルから取得した金額が代わり代わり入ってくる。

<product_name と over_buranch_point>
if文の条件に当てはまらなかった(branch_pointよりも金額が大きかったもの)「商品名」と「売上額」が入ってくる。

<str_count>
セルの行番号を指定するのに、String型でないとダメみたいなので変換。

while文

while count <= sheet_name.max_row:

sheet_name.max_rowで、シートの最終行を取得。( 今回は1,000行 )
なので、countが1,000以下の間はwhile文の処理が実行される。

amount = sheet_name.cell(row=count,column=2).value

比較する金額(B列の金額)をamountに代入。

if文では、amountが設定した金額より小さかったら実行されます。

amountが基準より大きければ、商品名と金額を変数に代入しています。(product_nameとover_buranch_point)

上記コードより先に作成しておいた、新しいシートに基準を通過してきた商品名と金額を書き込んでいきます。
最後に、countに+1して、while文の先頭に戻ります。

コード全部

## ライブラリのインポート
import openpyxl

## driveにアップロードしたexcelファイルの読み込み
excel_file = openpyxl.load_workbook("/content/drive/My Drive/Colab Notebooks/商品管理.xlsx", data_only=True)

## シートを読み込み
sheet_name = excel_file["売り上げ"]

## シートから取得できるか確認(A列の1行目を取得)
sheet_name.cell(row=1,column=1).value

## シートの長さ(length)を確認(今回は1,000行)
sheet_name.max_row

## 新しいデータを入れるシートを作成(名前を「分岐」とする)
new_sheet = excel_file.create_sheet('分岐')
new_sheet = excel_file['分岐']

## シートが作成されているか確認
excel_file.sheetnames

## 条件にあった物だけを抽出し新しいシートに記述
continue_num = 1
count = 2
branch_point = 700000
print(type(branch_point))
while count < sheet_name.max_row:
  amount = sheet_name.cell(row=count,column=2).value

  if branch_point > amount:
    count += 1
    continue_num += 1
    continue
  product_name = sheet_name.cell(row=count,column=1).value
  over_buranch_point = sheet_name.cell(row=count,column=2).value
  str_count = str(count - continue_num)
  new_sheet["A"+str_count] = product_name
  new_sheet["B" +str_count] = over_buranch_point

  count += 1

## excelファイルを保存
excel_file.save("/content/drive/My Drive/Colab Notebooks/商品管理.xlsx")

## 条件にあったデータの数(length)を取得
new_sheet.max_row

## 今回は、276行文のデータがヒットしました!

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次