投稿

ラベル(Excel)が付いた投稿を表示しています

PythonのopenpyxlでExcelの行と列を入れ替えてみた

イメージ
今回のPythonの勉強は、Excelの行と列を入れ替えることをしてみました。 予め、都道府県とその都道府県庁所在地をリスト化したExceを用意し、そのリストの行と列を入れ替えたものを新しい別のシートに作成するというもの。 以下がExcelファイル「Example.xlsx」の中身。 Pythonのコードは以下の通り。 解説はコード内にコメントしてあります。 #openpyxlモジュールを使用する import openpyxl #既存のExcelファイルを開く wb=openpyxl.load_workbook('Example.xlsx') #既存ファイルのシートを指定 sheet1=wb['Sheet1'] #既存ファイルに新規シートをシート名と位置を指定して作成 sheet2=wb.create_sheet(title='Sheet2',index=1) #Sheet1の値のある行数を取得 rw=sheet1.max_row #Sheet1の値のある列数を取得 cl=sheet1.max_column #iは値のある行数分繰り返す #jは値のある列数分繰り返す #range(start,stop)はstart≦i<stopでstopで指定した値は含まないので「+1」している for i in range(1,rw+1): for j in range(1,cl+1): C1=sheet1.cell(row=i,column=j) #sheet1のセルの行番号と列番号を指定している C2=sheet2.cell(row=j,column=i) #sheet1のセルの行番号と列番号を入れ替えてsheet2のセルを指定している C2.value=C1.value #sheet2のセルにsheet1のセルの値を代入 wb.save('Example.xlsx') #上書き保存 結果は以下の通り。 最初のリストの行数は6、列数は2。つまり、 rw=sheet1.max_row=6 cl=sheet1.max_column=2 for文は、 for i in range(1,7): #1≦i<7、つまり1...

【まとめ】Pythonのopenpyxlで行うExcelの基本操作

イメージ
Pythonの勉強を再開し、Excelを操作して自動化させるべく色々と進めています。 使用本は、『 退屈なことはPythonにやらせよう〜 』、私が購入したのは 初版第1刷で2017年発刊分 です。 Github の方にある正誤表の中身を本に書き写しておきます。 この本の12章がExcelに関することで、ここを中心に、わからない場合は他の章を参照して進めています。 私の環境は、Ubuntuの公式Docker ImageにPythonやopenpyxl、JupyterLabをインストールして、Pythonの結果が随時確認できるようにしています。詳細は、拙ブログ『 【まとめ】MacでPythonのGUIライブラリが使えるDockerの設定方法 』にまとめています。 マシン:MacBook Pro OS:macOS Catalina(10.15.7) 仮想環境:Docker Desktop エディタ:JupyterLab Python:Ver.3.8.2 openpyxl:Ver.3.0.5 Excelを操作するといいながら、以下の画像はGoogleスプレッドシートです。ファイルは拡張子「.xlsx」で保存すれば、Excelが無くてもPythonで操作が可能で、GoogleスプレッドシートでもOpenOfficeで開きますので確認も可能です。 そんな中、Excelを操作する基本的なコードを備忘録としてまとめました。 #openpyxlモジュールを使用する import openpyxl #新規Excelファイルを開く wb=openpyxl.Workbook() #このExcelを保存する wb.save('example_copy.xlsx') #新規ファイルのシート名を確認する wb.sheetnames #シート名は「Sheet」の1シートのみある状態 #シート「Sheet」を指定する wb['Sheet'] #シート名を取得する wb['Sheet'].title #シート「Sheet」のシート名を変更する wb['Sheet'].title='Example 1' #シート名を確認する...

なぜPython?Excelを操作して自動化したいのです!その方法と注意点

イメージ
昨日まででDockerでの開発環境構築は一応完成し落ち着いたので、やっとPythonの勉強を再開することにしました。 自分の現在のPythonの勉強方法と、ちょっと注意すべきことがありましたので以下に述べていこうと思います。 目次 なぜPython?それはExcelを操作して自動化したいのです Pythonの教科書として購読中の書籍 PythonでExcel操作の開始 注意点 なぜPython? それはExcelを操作して自動化したいのです そもそもPythonを覚えて何をしたいか。 それは Excelを操作して自動化したい 、ということです。 私の本職は一応デザイナーを名乗っていて、ロゴ制作やWEB制作などをしていますが、InDesignで組版もしています。というか前職のメインはこちらでした。 冊子を組版したりもしていましたが、バリアブル印刷用にExcelでテキスト処理(主に関数を駆使して)してInDesignにデータ結合などで流し込みをしたりもよくしていました。 Excel関数だと関数自体が煩雑になりやすくて、自分で作っておきながら後で見返すと何がなんだか分からなくなる、それほどです。 で、このExcelでのテキスト処理をもっと効率よくしたいと。 Pythonの教科書として購読中の書籍 Python本は、『 Python本のオススメと絶対に挫折しないための学習方法とは | ガンマソフト株式会社 』を参考に以下のものを購入しました。 そもそもこの本を進めていって、 TurtleやTkinterが動かなくて、DockerでGUIライブラリを稼働させるように構築しよう と思った次第です。それだけでも買ってよかったです。 この書籍の後半は人工知能の話になるので割愛しましたが、懇切丁寧な解説でPythonの敷居を低めてくれました。 続けて、こちらを購入しました。Pythonの文法といいますか書き方といいますか、1冊目より深い解説をされていて、辞書的に使えるかなと思っています。ですので、この本は全体をざっと読むに留め、不明点がある時に読み返そうと思います。 後半はGUIの操作やゲームを作ることをしますので、そちらに興味のある方はいいのではないでしょうか。 PythonでExcel操作の開始 そして今...

DTPでよく使うエクセル関数の使い方を丁寧に紹介【COUNTIF関数・OR関数・IFS関数】

イメージ
はじめに 顧客リストの「顧客名」に、会社名と個人名が混在している場合が多いと思います。 大抵は「顧客名」に敬称は追記していないと思います。 ですが、このリストを使ってDMや年賀状などの宛名を印字する場合、敬称が無いと失礼ですね。 では、手で一つ一つ入力していきますか? 非常に時間と手間がかかりますよね。 顧客名が個人の場合は「様」を、法人の場合は「御中」を判別して、自動的に追加したい。 でも会社名と個人名が混在していて、どう判断して追加すれば良いのか。 また法人の場合、株式会社や有限会社だけでなく、一般社団法人や財団法人などもあります。 また、(株)や(有)、(一社)、(財)など略称で記述されている場合もあります。 今回は、それらを考慮した関数を紹介いたします。 目次 COUNTIF関数―条件に合うかどうかを判断 OR関数 IFS関数―複数の条件を一括で 会社には「御中」、個人名には「様」を追加する 会社以外の法人にも「御中」を追加する (株)(財)などの略称のある顧客名にも「御中」を追加する IFS関数でまとめて処理する方法 (株)(財)などの略称を正式名称に置き換えながら「御中」を追加する COUNTIF関数―条件に合うかどうかを判断 1 つの検索条件に一致するセルの個数を返します。 また、1 つの検索条件に一致するかどうかを判断する場合にも使用します。 =COUNTIF(範囲, 検索条件) 範囲 必ず指定。検索の対象とするセルやセルの範囲が指定できます。 検索条件 必ず指定。数値、式、セル範囲、または文字列で指定できます。 参照: COUNTIF 関数 - Office サポート 例1:「会社」の付く法人名の個数 =COUNTIF(A2:A5,"*会社*") 結果:2 OR関数 いずれかの引数が TRUE と評価された場合は TRUE を返し、すべての引数が FALSE と評価された場合は FALSE を返します。 =OR(論理式1[,論理式2],...) 参照: OR 関数 - Office サポート IFS関数―複数の条件を一括で 最新版のExcelを所持している場合、こちらも使用可能です。 IFS 関数は、1 つ...

DTPでよく使うエクセル関数の使い方を丁寧に紹介【IF関数・LEN関数・RIGHT関数】

イメージ
はじめに 前回は、 文字列中の文字を抽出するMID関数 を解説しました。 今回は、道府県名を取り出す方法を例に、条件ごとに作業を分けるIF関数、テキストの文字数を調べるLEN関数、右端からの文字を抽出するRIGHT関数、を解説します。 実は、意外に簡単です。 というのも、道府県名はパターンが非常に少ないので、この場合あの場合その場合…、と条件による取り出し方も非常にコンパクトになります。 目次 IF関数―条件ごとに作業を分ける LEN関数―テキストの文字数を調べる RIGHT関数―右端からの文字を抽出 道府県名の文字数のパターンを調べる 郡市区町村名の1文字目に「県」があるか 住所から都道府県名を取り出す 住所から郡市区町村以下を抜き出す IF関数―条件ごとに作業を分ける IF 関数を使うと、条件をテストして結果 (True または False) を返すことにより、値と予想値の間の論理的な比較を行うことができます。 =IF(条件が True であればある処理を行い、それ以外の場合は別の処理を行う) 参照: IF 関数 - Office サポート 例1: B2:千葉県 =IF(B2="千葉県","そうです","違います") 結果:そうです LEN関数―テキストの文字数を調べる 文字列の文字数を返します。 =LEN(文字列) 文字列    必ず指定。 文字数またはバイト数を調べる文字列を指定します。 スペースは文字として数えられます。 参照: LEN 関数、LENB 関数 - Office サポート 例2: B2:千葉県 =LEN(B2) 結果:3 RIGHT関数―右端からの文字を抽出 文字列の末尾 (右端) から指定された文字数の文字を抽出します。 =RIGHT(文字列[,文字数]) 文字列    必ず指定。 (A2などのセル名や"あいう"などの文字)を指定します。 文字数    省略可能。 取り出す文字数 (文字列の末尾からの文字数) を指定します。 参照: RIGHT 関数、RIGHTB 関数 - Office サポート 例3: B2:千葉県■市▲町12-34...