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

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

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

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

Q&A

解決済

3回答

802閲覧

Python プログラム内容について

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2021/09/22 12:34

エクセルシートをコピーして別ファイルに張り付ける内容なのですが
下記部分の処理内容の詳細が理解できません。どなたか教えていただけない
でしょか?
ranges = start_col + str(row_num) + ":" + goal_col + str(row_num)
この式が何をしているかがわかりません。

お手数おかけしますがよろしくお願いいたします。
「この説明部分です」
A1:CH1で数字の部分がrow_numで関数の引数に設定しているため最終行まで変更されていく。

Python

1import openpyxl 2inwb = openpyxl.load_workbook(r"C:\Users\oono\Desktop\抽出データ.xlsx") 3outwb = openpyxl.load_workbook(r"C:\Users\oono\Desktop\任意データ.xlsx") 4inws = inwb.active 5outws = outwb.active 6rows = inws.max_row 7columns = inws.max_column 8 9def input_excel(row_num): 10  in_list=[] 11  start_col="A" 12 goal_col ="CH" 13#A1:CH1で数字の部分がrow_numで関数の引数に設定しているため最終行まで変更されていく。 14  ranges = start_col + str(row_num) + ":" + goal_col + str(row_num) 15   16  for i in inws[ranges]: 17 for a in i: 18 in_list.append(a.value) 19  outws.append(in_list) 20  outwb.save(r"C:\Users\oono\Desktop\任意データ.xlsx") 21 22for i in range(rows): 23 i+=1 24 print(i) 25 input_excel(i) 26 27outwb.save(r"C:\Users\oono\Desktop\任意データ.xlsx") 28  

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

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

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

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

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

guest

回答3

0

ベストアンサー

ranges = start_col + str(row_num) + ":" + goal_col + str(row_num)

割とそのままだと思うのですが、

start_col="A"
goal_col ="CH"

っとあるので、↓のようになります。

python

1ranges = "A" + str(row_num) + ":" + "CH" + str(row_num)

仮にrow_numが1だった場合、

python

1ranges = "A" + str(1) + ":" + "CH" + str(1)

となるので、A1:CH1 となります。
Excelを使っているという事でこれの意味はわかるとおもいますが、A1からCH1までの範囲を示しています。

質問の回答としてはこれで良いかと思いますが、もう少し先まで話すと、

python

1for i in inws[ranges]:

rangesは↑のように使用されています。
ではinwsは何かというと

python

1inwb = openpyxl.load_workbook(r"C:\Users\oono\Desktop\抽出データ.xlsx") 2inws = inwb.active

とありますので、読み込んだExcelファイルのアクティブのシートである事がわかります。
つまり、アクティブのシート内の範囲をループしているという事になります。

参考

投稿2021/09/22 12:48

編集2021/09/22 12:56
yamap55

総合スコア1376

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

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

退会済みユーザー

退会済みユーザー

2021/09/23 12:05

yamap55様 ご丁寧に資料まで教えていただいてありがとうございます。 質問した以外のところも教えていただき、今回質問させていただいた内容の早期理解に役立ちました。 結果として、いろいろ調べながら、最後は分解していったら内容を理解することができました。 ベストアンサーとさせていただきました。 今回はありがとうございました。
guest

0

これが分からないと言うことは、Pythonに限らずプログラミング経験皆無と言うことですかね?
他人の書いたプログラムを読むためには、ある程度のプログラミングスキルが必要です。

start_colは文字列の"A"です。それにrow_numという数値を文字列化したものを連結して、
さらに、":"という文字列を連結して、
さらにgoal_colつまり、文字列の"CH"を連結して、
最後にrow_numという数値を文字列化したものを連結しています。

もし、row_num3という値だったとすると、結果は"A3:CH3"という文字列になります。

投稿2021/09/22 12:43

otn

総合スコア84531

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

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

退会済みユーザー

退会済みユーザー

2021/09/22 12:56

otn様 yamap様 ご返信ありがとうございます。プログラミングの勉強を始めて一月ほど経過しますがわからないことばかりです。 いただいた内容でrow_numの値が○○ならということですが、row_numに入る値はどこから導き出されるのでしょうか? お手数おかけしますがご教授お願いいたします。
otn

2021/09/22 14:06

def input_excel(row_num): と書いてあるので、舌から2行目にある input_excel(i) の実行時点の i の値が row_numに入ります。 が、これが分からないとうことはPython言語もまだほとんど学んでいないと言うことですよね。 さすがにそれでPythonプログラムを読もうというのは無謀です。 他人の書いたプログラムを読むのは、Python入門を終えてからにしましょう。
退会済みユーザー

退会済みユーザー

2021/09/23 12:08

otn様 ご回答ありがとうございます。 言われてよくよく見たらそうだなと気づきました。はじめはどこがどのように機能しているか全くわかりませんでしたが、色々調べながら、分解してどのよなリストになってどのように出力されているかを調べたら全体像がわかりました。 色々と言っていただきありがとうございます。 これから勉強して理解を深めていこうと思っています。
guest

0

他の人も仰っているように、まずは基礎からやりましょう。
基礎を蔑ろにすることは大変危険ですし、あまりにも無謀です。

料理でいえば、初めて料理する人が『レシピを見ずに、オリジナリティを出そうとして、余計なものを入れる』ようなものです。まともなものが作れるとは思えません。仮にうまくいったとしても、それはたまたまです。

あるいは足し算すら理解していない人が掛け算をやるようなものでしょうか。
そりゃ、九九を覚えれば計算はできるでしょうけど、『使いどころ』とかがわからないはずです。
「太郎さんは10円のお菓子を5個書いました。いくらになるでしょうか」的なものとか。
下手すれば、場合によっては足し算すらわからない人に微積分を説明するようなものです。

できるわけありませんね。

英語で言えば、文法もやらない、単語も覚えようともしない、辞書すら引かない。
これで英文読めますかね?

まずは基礎からやりましょう。

で、今回の問題ですが、コードを読みましょうです。

プログラミングというのは、こう書けばいいというものではありません。

プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を逐一指示されながら処理しているだけの代物である」です。

簡単に言えば、『現実世界のシミュレーション』です。

なのでコードを読みましょう。

ranges = start_col + str(row_num) + ":" + goal_col + str(row_num)

とりあえず、数学の問題とかと考えてください。
そうすると、普通に考えると、start_colとかの定義を確認したくなりますよね。
なので、start_colを探す。
どうやら、”A”のようですね。

row_numとはなんでしょうか。
どうやら引数のようですね。
引数はその都度値が変わるので保留。
意味は今回の名前からすると『行番号』と言ったところでしょうか。

というふうに調べていくと、

“A” + 行番号 + “:” + “CH” + 行番号

となります。仮に行番号が1なら、

A1:CH1

となるはずです。

また、今回の変数の値はすぐにわかりましたが、値がころころと変わることが多いです。その場合はロジックを追いながら考える必要があります。

投稿2021/09/22 23:28

BeatStar

総合スコア4958

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

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

退会済みユーザー

退会済みユーザー

2021/09/23 12:04

BeatStar様 ご回答ありがとうございます。 色々分解しながら確認したところ、何がどのようにリスト化されてどのように動作しているかがわかりました。ご指摘ありますように、基本もしっかりと勉強したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問