(写真をなかなかアップロードできないので、ちょっとプログラムのことを・・・)
プログラムって基本的にめんどくさいものなんです。
ひたすら考えて、ひたすらパソコンと向き合って・・・
時には意味不明な出来事が起きたり、どうしても解決できない問題があったり・・・
発狂しそうになるときもあったり・・・
地道な作業でもあります。
それでも続けるのは、やっぱり、その先にある快感に囚われてるからでしょうね。
「なんだこれ」「なんでこうなるの!」っていう状態って、結局自分の力不足とか認識不足、確認不足だったりするんです。
「こういうプログラムを作りたい」っていうのがあれば、基本的にはそれは可能なんです。
でも、自分のいろんな「不足」によって、それが阻まれる。
そんな状況だからこそ、その目の前の問題を克服したときとか、最終的に目的のプログラムを完成させたときとかは、ものすごい満足感と成長感や快感を感じるんですよねー。
時には安心感だったりもしますけど。
こういうことやってて思うけど、こういう問題って、何もプログラムだけに限ったことじゃないから、こういうことに対する精神とかは強くなってる気がするなー。
何か問題が起きたとき、「めんどくさい」とは思わず、「なんとかできないかな」と思うようになってる。
(めんどくさいって思う人が多いから、実際に解決するのは難しいけどね・・・)
・・・まぁ、大それたものは作れないですけど、なんだかんだ身近なことのためにプログラム作ってます。
エクセルのお話。
もしデータ数が多くて、そのままグラフにすると煩雑な感じのグラフになってしまう場合、グラフとしては、ちょっともったいないですよね。
例えば、折れ線グラフで無数の点や凸凹があるとか。
全体の傾向を知りたいのに、点が細かすぎると見づらい。
VBAでデータを適当に小さくしちゃいましょう。
'***********************************************************
Sub SmallData() '選択セル範囲を何行かごとにデータを抽出する
Dim r As Integer, c As Integer, cnt As Integer, cnt2 As Integer, cnt3 As Integer
Dim rr As Integer, cc As Integer, number As Variant, aSheet As Integer
Dim name As Variant, s As Variant
number = Application.InputBox(Prompt:="何行ごとに抽出しますか?", Title:="データの抽出", Type:=1) '何行ごとにデータを抽出するか
If number = "" Or number = 0 Then Exit Sub '何も入力されなかったり"0"が入力されたら終了
Application.ScreenUpdating = False
On Error GoTo NameError
r = Selection.Rows.Count '選択範囲の行数
rr = Selection.Row '選択範囲の最左上の行番号
c = Selection.Columns.Count '選択範囲の列数
cc = Selection.Column '選択範囲の最左上の列番号
Cells(rr, cc).Activate
cnt = 1
aSheet = ActiveSheet.Index
Worksheets.Add After:=Sheets(ActiveSheet.Index)
NameChange:
Sheets(aSheet + 1).name = "SmallData" & cnt
Sheets(aSheet).Activate
For cnt = 1 To c 'cntの再利用
Sheets(aSheet + 1).Cells(1, cnt).Value = Cells(rr, cc + cnt - 1).Value '選択範囲のタイトル部分を抽出
Next cnt
For cnt = 1 To r + 1 Step number 'このFor文で抽出処理
cnt3 = cnt3 + 1
For cnt2 = 1 To c
Sheets(aSheet + 1).Cells(cnt3 + 1, cnt2).Value = Cells(rr + cnt, cc + cnt2 - 1).Value
Next cnt2
Next cnt
Application.ScreenUpdating = True
Exit Sub
NameError: '既に同じ名前のファイルが存在したら、番号を加算する
If Err.number = 1004 Then
cnt = cnt + 1
Resume NameChange
End If
End Sub
'***************************************************
例えばこんなデータを小さくしたい

このデータを選択して、このマクロを実行

何行ごとに抽出するか聞かれるので、お好みで。
抽出間隔は10行で実行後

また、そのまま違う抽出間隔で再び実行。(こちらは20行)

2つの抽出データができました。
エラーでストップする場合は、VBAのオプションで「エラートラップ」を変更してください。
滅多に使われることのないプログラムだけどね・・・。
もしデータ数が多くて、そのままグラフにすると煩雑な感じのグラフになってしまう場合、グラフとしては、ちょっともったいないですよね。
例えば、折れ線グラフで無数の点や凸凹があるとか。
全体の傾向を知りたいのに、点が細かすぎると見づらい。
VBAでデータを適当に小さくしちゃいましょう。
'***********************************************************
Sub SmallData() '選択セル範囲を何行かごとにデータを抽出する
Dim r As Integer, c As Integer, cnt As Integer, cnt2 As Integer, cnt3 As Integer
Dim rr As Integer, cc As Integer, number As Variant, aSheet As Integer
Dim name As Variant, s As Variant
number = Application.InputBox(Prompt:="何行ごとに抽出しますか?", Title:="データの抽出", Type:=1) '何行ごとにデータを抽出するか
If number = "" Or number = 0 Then Exit Sub '何も入力されなかったり"0"が入力されたら終了
Application.ScreenUpdating = False
On Error GoTo NameError
r = Selection.Rows.Count '選択範囲の行数
rr = Selection.Row '選択範囲の最左上の行番号
c = Selection.Columns.Count '選択範囲の列数
cc = Selection.Column '選択範囲の最左上の列番号
Cells(rr, cc).Activate
cnt = 1
aSheet = ActiveSheet.Index
Worksheets.Add After:=Sheets(ActiveSheet.Index)
NameChange:
Sheets(aSheet + 1).name = "SmallData" & cnt
Sheets(aSheet).Activate
For cnt = 1 To c 'cntの再利用
Sheets(aSheet + 1).Cells(1, cnt).Value = Cells(rr, cc + cnt - 1).Value '選択範囲のタイトル部分を抽出
Next cnt
For cnt = 1 To r + 1 Step number 'このFor文で抽出処理
cnt3 = cnt3 + 1
For cnt2 = 1 To c
Sheets(aSheet + 1).Cells(cnt3 + 1, cnt2).Value = Cells(rr + cnt, cc + cnt2 - 1).Value
Next cnt2
Next cnt
Application.ScreenUpdating = True
Exit Sub
NameError: '既に同じ名前のファイルが存在したら、番号を加算する
If Err.number = 1004 Then
cnt = cnt + 1
Resume NameChange
End If
End Sub
'***************************************************
例えばこんなデータを小さくしたい

このデータを選択して、このマクロを実行

何行ごとに抽出するか聞かれるので、お好みで。
抽出間隔は10行で実行後

また、そのまま違う抽出間隔で再び実行。(こちらは20行)

2つの抽出データができました。
エラーでストップする場合は、VBAのオプションで「エラートラップ」を変更してください。
滅多に使われることのないプログラムだけどね・・・。



