これからプログラミングを勉強するみなさんに。先ずは一歩踏み出してみましょう!
どうしてプログラミングは難しく感じるのか?
プログラミングを勉強しようとすると最初にぶつかる壁は「難しさの壁」です。
なぜ、プログラミングは難しく感じてしまうのか?
以下「C言語」で記述したコードです。
#include
#include
void generate_data(const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
perror("Error opening file");
exit(EXIT_FAILURE);
}
for (double x = -10.0; x <= 10.0; x += 0.1) {
double y = x + 1;
fprintf(file, "%lf %lf\n", x, y);
}
fclose(file);
}
void plot_data(const char *filename) {
FILE *gnuplot = popen("gnuplot -persistent", "w");
if (gnuplot == NULL) {
perror("Error opening gnuplot");
exit(EXIT_FAILURE);
}
fprintf(gnuplot, "set title '一次関数 y = x + 1 のグラフ'\n");
fprintf(gnuplot, "set xlabel 'x軸'\n");
fprintf(gnuplot, "set ylabel 'y軸'\n");
fprintf(gnuplot, "set grid\n");
fprintf(gnuplot, "plot '%s' with lines title 'y = x + 1'\n", filename);
pclose(gnuplot);
}
int main() {
const char *filename = "data.txt";
generate_data(filename);
plot_data(filename);
return 0;
}
このコードを見た瞬間に「あープログラミングなんて・・・」って思い脱落する人たちが半数以上出てくるでしょう。
正直何を書いているのか「呪文」でも唱えられているようですよね。
先ずはここを乗り切ることから先に進めなくてはなりません。
どうやってプログラミングの第一の壁を乗り越えれば良いのか
以下のプログラムを見てください。
y = x + 1
これもプログラミングです。
数式も、数字の代入も中学生でも理解できる内容だと思います。
実は、大袈裟に言うとC言語で記述した内容とほぼ同じなんです。
単純な一次方程式ですが、C言語で記述した内容はこの一次方程式をグラフに出力するためのプログラムになっています。
学校であれば、「y = x + 1」を「x」に数字を代入しながら手書きでグラフを書くことができます。
C言語ではこの計算をしてグラフに出力する部分のコードが色々とくっついているだけです。
なので、先ずはプログラミングの基礎では計算をすることから始めましょう。
これならプログラミングができますよね?
変数と言う変態数字
辞書には「一定範囲内にはあるが、どの特定値とは限らずに考えた時の、その数(を表す記号)。」とあります。逆にわからない説明ですが・・・
以下のプログラミング上の数式を見てください。
x = 1
x = x + 1
この数式は成り立たないんじゃない?って思った方!頭が良すぎる理系脳です。
褒めてますよ。
でも、成り立たないんじゃなくて、これはプログラミングで頻繁に使う「変数」になります。
この場合、変数は「x」ですがその名の通り変わる数です。
数学的には成り立たない答えの無い数式ですが、プログラミングでは
1行目は左辺「x」に右辺「1」を代入します
2行目は左辺「x」に右辺「x + 1」を代入します。
そして計算結果は「x = 2」になります。
この変数もプログラミングの難しさの壁になっているはずです。
ここではなぜpythonとエクセルVBA入門なのか?
「よくわかるpythonとエクセルVBA入門」と言うことで、なぜこのプログラミング言語が推しなのかと言うと、両方ともに自然言語に近くわかりやすいプログラミング言語だと筆者は思っているし、筆者自身もC言語は無理だけど、python、VBAなら理解出来たし、できるのでここで紹介していきます。
またpythonは近年人気のある言語で多くのプログラマーが習得している言語です。また、エクセルVBAはマクロを含めエクセルの自動化や業務効率向上などを目的とし双方ともに学習価値が高いプログラミング言語だと思います。
pythonで冒頭のC言語のコードを書いた場合
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm
# 日本語フォントを設定(Mac用)
font_path = '/System/Library/Fonts/ヒラギノ角ゴシック W6.ttc' # ヒラギノ角ゴシックのパス
font_prop = fm.FontProperties(fname=font_path)
# xの範囲を設定
x = np.linspace(-10, 10, 400)
# yの値を計算
y = x + 1
# グラフの作成
plt.figure(figsize=(8, 6))
plt.plot(x, y, label="y = x + 1")
plt.title("一次関数 y = x + 1 のグラフ", fontproperties=font_prop)
plt.xlabel("x軸", fontproperties=font_prop)
plt.ylabel("y軸", fontproperties=font_prop)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(color='gray', linestyle='--', linewidth=0.5)
plt.legend(prop=font_prop)
plt.show()
これももちろん「何やねん?難しやろ!」て思うと思いますが、ここでは少し我慢してください。
pythonではライブラリというものが豊富に揃えられており、それらをインストールしてその機能を利用することが可能になります。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm
このimportでライブラリを利用することが出来、それらのコマンド(プログラミングの関数)が「plt.」や「np.」になっていますので、ここではそういうものだと理解してください。
このプログラムで出力したグラフ「y = x + 1」の一次方程式が以下になります。
上記はグラフ表示を除けば
x = np.linspace(-10, 10, 400)
y = x + 1
プログラムコードはこれだけと言って良いと思います。
※先頭に「#」が付くものはコメント行になり、コードをわかりやすく説明しているだけで、プログラムの動作には全く関係ないのでコードに書かなくても問題はありません。ただし、大規模にコードを書く場合は誰が見てもわかるようにコメントを書くことも重要になるはずです。
エクセルVBAでコードを書いた場合
Sub DrawGraph()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適宜変更してください
' データの入力
Dim x As Double
Dim i As Integer
i = 1
For x = -10 To 10 Step 1
ws.Cells(i, 1).Value = x
ws.Cells(i, 2).Value = x + 1
i = i + 1
Next x
' グラフの作成
Dim chartObj As ChartObject
Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=375, Top:=50, Height:=225)
Dim chart As Chart
Set chart = chartObj.Chart
' データ範囲の設定
chart.SetSourceData Source:=ws.Range(ws.Cells(1, 1), ws.Cells(i - 1, 2))
' グラフタイプの設定
chart.ChartType = xlXYScatterLines
' グラフタイトルと軸ラベルの設定
With chart
.HasTitle = True
.ChartTitle.Text = "一次関数 y = x + 1 のグラフ"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "x軸"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "y軸"
End With
' グリッドラインの設定
With chart.Axes(xlCategory).MajorGridlines
.Border.LineStyle = xlDash
.Border.Color = RGB(128, 128, 128)
End With
With chart.Axes(xlValue).MajorGridlines
.Border.LineStyle = xlDash
.Border.Color = RGB(128, 128, 128)
End With
' 凡例の設定
chart.HasLegend = True
chart.Legend.Position = xlLegendPositionBottom
chart.SeriesCollection(1).Name = "y = x + 1"
End Sub
これもまた難しいと思いますが、基本は「y = x + 1」の一次方程式をx = -10 からx = 10まで整数値で計算しエクセルのグラフ機能を使って表示するプログラムです。
グラフを表示させる以外のプログラムは
i = 1
For x = -10 To 10 Step 1
ws.Cells(i, 1).Value = x
ws.Cells(i, 2).Value = x + 1
i = i + 1
Next x
これだけと言っても過言ではありません。
これなら何となくわかりますよね。
For文などの関数は別に説明をします。
もっとシンプルにプログラミングをコードを見てみましょう
前述したようにプログラムコードはシンプルにみた方がよりわかりやすく理解ができると思います。
プログラムをショートケーキに例えれば
①まずは生地のスポンジを作ります「プログラムのy = x + 1の部分」
②スポンジを2枚にして間にホイップクリームを挟みイチゴも一緒に挟みましょう「プログラムのy = x + 1のxを変化させる部分(For文など)」
③ホイップクリームを全体にぬり、形を整えましょう「グラフの形を作る部分」
④最後にイチゴなどをのせデコーレートして完成「グラフを画面に出力する部分」
こんな感じにいくつかの工程を重ね一つのケーキ「一つのコード」が完成します。
初めはスポンジを作るだけを始めて、あとはこんな形にしたい、こんな味にしたいと作り進めることが重要です。
これまでの説明でもイマイチわからないですよね
はい。まだわからなくて当然です。
実際にコードを書いて動作させて覚えるのが一番手っ取り早い覚え方だと思います。
このコードを書いてすぐに実行できるのもpythonとエクセルVBAだからコソできるものです。
このような言語をインタープリタ型言語と呼んでいます。
C言語のような言語をコンパイル型と呼ばれています。
どちらも長所短所がありますが、書いたコードをすぐに実行できるインタープリタ型はプログラミング学習するにはもってこいの言語だと言えます。
最後にもう一つ今だからこれを使おう!
プログラミングを勉強しようと思ている方はどちらかと言えばITリテラシーの高い方だと思います。
近年、chatGPTの出現によりAIの進歩が指数関数的な勢いで発達しています。
ここで言うAIは生成AIと呼ばれる分野です。
OpenAIのchatGPTやMicrosoftのcopilot(ほぼchatGTPですが)、またGoogleのGeminiなどさまざまな生成AIが出てきています。
生成AIではプロンプト(文字や言葉でAIに指示を出す)で指示を出すことによりAIが回答してくれます。当然ですがプログラミングもできるのでコードも書いてくれるのです。
当然世の中には、私のブログのようにGoogleで検索すればpythonやVBAのコードの書き方などが検索可能ですが、生成AIであれば、必要な情報を記述し指示を出せば瞬時にコードを書いてくれます。
プログラミングの内容もわからずAIにコードを記述してもらっても勉強になりませんし、変更など細かな対応なども出来ません。
でも、覚えながら多くを生成AIに頼ってプログラミングをするのも良いと思います。