エクセルマクロ 達人養成塾 オンライン講座 質問と回答

無料・有料のオンライン講座で 寄せられたメッセージの一部を紹介致します。

[8415]表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)

2017-06-23 18:30:20 受講生さんからの投稿です。

お世話になります。
現在、エクセルマクロ・VBA基礎編フォローアップ を学習していますが、6月末でキャンペーン終了ということなので、不安すぎて、まだ基礎編フォローアップに苦戦しながらも、先走り発展編1を購入しましたが、いつになれば取り掛かれるのかわかりません。
でも、少しずつでは、ありますが毎日学習を進めていっています。
現在、基礎編フォローアップ動画18の問題2で戸惑っています。
問題1は理解できたのですが、IF文の中のtiku=””の意味が、まったく理解できずに、マクロを書くことができません。
何度も間違っても、うまくいきません。

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 

[8374]VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ

2017-06-18 12:58:19 受講生さんからの投稿です。

【動画24】の問題についてご教示願います(問題添付)
データ転記先の表に該当する氏名が見つからない場合は、転記先表にエラーが出るようにプログラムを作成しました(下記参照)
このプログラムを動かすと、D列に全てエラーが記載されてしまいます。
お忙しい中申し訳ありませんが、マッチングしていない氏名のみエラーが
出るにはどのようにしたら良いかご教示願います。
【回答1】
Sub test1()
Dim saki
Dim moto

For moto = 4 To 31
For saki = 4 To 31

If Worksheets("転記先").Range("B" & saki).Value = Worksheets("元データ").Range("B" & moto).Value Then
Worksheets("転記先").Range("C" & saki).Value = Worksheets("元データ").Range("C" & moto).Value

ElseIf Worksheets("転記先").Range("B" & saki).Value <> Worksheets("元データ").Range("B" & moto).Value Then
Worksheets("転記先").Range("D" & saki).Value = "エラー"

End If

Next

【回答2】
Sub test2()
Dim saki
Dim moto

For moto = 4 To 31
For saki = 4 To 31

If Worksheets("転記先").Cells(saki, 2).Value = Worksheets("元データ").Cells(moto, 2).Value Then
Worksheets("転記先").Cells(saki, 3).Value = Worksheets("元データ").Cells(moto, 3).Value
Else
'Worksheets("転記先").Range("D" & saki).Value = "エラー"
End If
Next
Next

End Sub 

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8351]勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

2017-06-13 21:45:01 受講生さんからの投稿です。

お世話になります。
下記の記載したprogramと回答のプログラムが、違うことによって不都合が生じることになるのでしょうか?
下記に記載したプロフラムはループの後に出力先を記載せずに、IF文後に
記載しています。実行した場合、回答と同じ値が導いていますが、回答のように、ループ後の出力先を記載することが、いいのでしょうか。
記載したprogramのgoukei の場合は、最終のループ後に記載しています。
そのあたりのことについて、わかりませんでしたので、宜しくお願いします。


[code]Sub rensyu1()
Dim goukei
Dim gyo
Dim migi
Dim hida
Dim syoukei
For gyo = 4 To 9
syoukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & gyo).Value Then
syoukei = syoukei + Range("J" & migi).Value
goukei = goukei + Range("J" & migi).Value
End If
Range("D" & gyo).Value = syoukei
Range("E" & gyo).Value = Range("C" & gyo).Value + syoukei
Next
Next
Range("D10").Value = goukei
Range("E10").Value = Range("C10").Value + goukei
End Sub[/code]

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8240]転記先シートを生成してデータを流し込む。

2017-05-26 16:21:08 柴田 邦彦さんからの投稿です。

[2]と[3]の問題について質問します。
F8で1行ずつマクロを走らせたときに、
Sheets("template").Copy After:=Sheets(2)
のあとでF5を押したときのように一気に走ってしまします。
なぜでしょうか?
当方だけの現象でしょうか?

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8149]出現回数を数える。CountIf関数がやっていることをマクロで書くと?

2017-05-22 13:37:42 受講生さんからの投稿です。

Sub nantoka()
Dim goukei
Dim gyo
Dim migi

For migi = 4 To 6
goukei = 0
For gyo = 4 To 18
If Range("C" & gyo).Value = Range("E" & migi) Then
goukei = goukei + 1

End If
Next
Range("F" & migi).Value = goukei
Next
End Sub

お世話になります。
Range("F" & migi).Value = goukei
のプログラムを書くときに、
NextとNextの間に書くことが、
自力で書くときに迷います。
homeshift↓↓↓で選択するとき
最初のForNext構文が完成させたときに、
出力先を書くことで、別物と判断している
みたいで、ワンポイントアドバイス
よろしくおねがいします。

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 

[8124]勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

2017-05-14 08:41:52 受講生さんからの投稿です。

[3]
[2]で作ったマクロを改変し、さらに、セルD10、セルE10に各列の合計額を記入するマクロとしなさい についてセルD10 にD4からD9の合計額を表示するというマクロを作る場合にはどのような式で書くことができますか?
[1][2]については以下のようなマクロで問題なく動いたのですが、D列の値をそれぞれの項目について値を入れていくというマクロ(累積値ではなく)になったので、合計のマクロが作れませんでした。Range("D10").value=Sum(”D4:D9”).valueというのも試しましたが、15100という値のみ入りました。アドバイスいただければ幸いです。

Sub test()
 Dim harai
 For harai = 4 To 9
 Dim koumoku
 koumoku = Range("B" & harai).Value
 Dim iwai
 iwai = Range("D" & harai).Value
 Dim retsu
 For retsu = 4 To 10
    If Range("I" & retsu).Value = koumoku Then
    iwai = iwai + Range("J" & retsu).Value
    End If
  Next
  Range("D" & harai).Value = iwai
  Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
  Next
  
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8118]データ記入用ファイルを配布する-その2

2017-05-12 21:55:32 受講生さんからの投稿です。

小川先生

基礎編の知識だけでここまでのことができるなんて!
実際にファイルが作成されたのを確認して、心底感動しました!!
マクロを書いている間も楽しかったです^^
処理に時間がかかるのは、基礎編の知識で書いているからですか?
それともこの程度の処理であれば、発展編以降の知識で書いてもこのくらいは
時間がかかるのでしょうか?

また、作成されたファイルを開こうとすると以下の確認メッセージが表示されます。
”開こうとしているファイル'a.xls'は、実際にはその拡張子が示すファイル形式ではありません。
このファイルを開く前に、ファイルが破損していないこと、信頼できる発行元からのファイルであることを確認してください。
ファイルを今すぐ開きますか?”
「はい」をクリックすると中身は問題なく表示されますが、保存の構文に問題あるのでしょうか・・・

ちなみに保存にかかわる構文(抜粋)は以下の通りです。
Dim sakuseisaki
Dim filen

sakuseisaki = Workbooks("全部1つ").Worksheets("部署情報").Range("D" & busyo).Value
filen = Workbooks("全部1つ").Worksheets("部署情報").Range("E" & busyo).Value

ChDir "C:\Users\hasegawa\Desktop\ensyu_copy\01-課題一式"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\hasegawa\Desktop\ensyu_copy\01-課題一式\" & sakuseisaki & "\" & filen & "", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

ご教授いただければ幸いです。
よろしくお願いいたします。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8110]セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

2017-05-11 20:26:27 受講生さんからの投稿です。

8100です。
何度も申し訳ございません。
構文の上が切れてしまいました。
貼り直しさせていただきます・・・

Sub kugiritest()
Dim mae
Dim ato
Dim saki
Dim gyo
Dim moji
Dim n

saki = 2

For gyo = 2 To 7
mae = 0
ato = 0
moji = Range("D" & gyo).Value
For n = 1 To Len(moji)
If Mid(moji, n, 1) = "、" Then
mae = ato
ato = n
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1)
saki = saki + 1
End If
Next
mae = ato
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1)
saki = saki + 1
Next
End Sub

[ 続きを読む ]  返信件数:0件  [ 動画を見る] 

[8109]セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

2017-05-11 20:21:20 受講生さんからの投稿です。

小川先生

8100の受講生です。
早速お返事いただきありがとうございます。
>For Next構文のカウンターに使う変数は、構文内で変更しないというのが原則です。
そうなのですね!For Nextはあくまでも順番に1つずつということなのでしょうか。
その点を意識し考えてみたところ、最初の構文ではうまくいかず、小川先生の模範通りMidを使って1文字ずつ調べることに落ち着きました。
自分で手直しした構文を回答と見比べたところ、笑ってしまうほど同じで
(当たり前かもしれませんが・・・)とてもうれしくなりました。

For Nextを抜けた後の記入指示で、私は抜き出す文字数を指定せずに開始場所のみ
指定してそのあと全部と指示していますが、それでも大丈夫でしょうか?
手直しした構文もぜひ見てください!(回答とほぼ同じですが)
よろしくお願いいたします。
Dim saki
Dim gyo
Dim moji
Dim n

saki = 2

For gyo = 2 To 7
mae = 0
ato = 0
moji = Range("D" & gyo).Value
For n = 1 To Len(moji)
If Mid(moji, n, 1) = "、" Then
mae = ato
ato = n
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1, ato - mae - 1)
saki = saki + 1
End If
Next
mae = ato
Range("G" & saki).Value = Range("B" & gyo).Value
Range("L" & saki).Value = Mid(moji, mae + 1)
saki = saki + 1
Next
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8101]セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

2017-05-11 11:47:03 受講生さんからの投稿です。

以下の8100の受講生です。
Tabがうまく反映されず、見にくいマクロになり申し訳ございません・・・
エクセル上ではTab使ってます。。。

[ 続きを読む ]  返信件数:0件  [ 動画を見る] 

[8100]セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を切り出す

2017-05-11 11:44:47 受講生さんからの投稿です。

小川先生
お世話になります。初コメです。
全くマクロを書けない状態から、順番に動画で学びここまで理解することができました。
小川先生には感謝しかありません!ほんとにわかりやすいです!!

以下、自力で書いてみたマクロです。
先生と同じように動くのですが、問題点はありませんでしょうか?
Sub kugiri6()
Dim mae
Dim ato
Dim saki
Dim gyo
Dim moji

saki = 2

For gyo = 2 To 7
moji = Range("D" & gyo).Value
For mae = 1 To Len(moji)
ato = InStr(mae, moji, "、")
If ato <> 0 Then
Range("L" & saki).Value = Mid(moji, mae, ato - mae)
mae = ato
saki = saki + 1
Else
Range("L" & saki).Value = Mid(moji, mae)
saki = saki + 1
Exit For
End If
Next
Next
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8070]表を解析して1行のリストを作る、1行のリストを解析して表にする(その1)

2017-05-03 16:01:32 柴田 邦彦さんからの投稿です。

基礎コースフォローアップを受講中です。

[受講方法]
1.動画を見る前に、自力で課題(ドリル)にチャレンジしてみる。
2.動画を見る
3.小川先生のロジックと自分のロジックを比較する。
4.再度、小川先生のロジックでマクロを作成する。
時間は要しますが。上記の4ステップで学習しております

[質問]
一般的にマクロに正解はないと言われますが…
自力で作成したマクロがスマートにできてるかどうかは別として、
マクロの結果が同じであるならば、小川先生の解答と同じでなくても気にする必要ないのでしょうか?
それとも、結果が同じであっても、ロジックの考え方を改めるべきでしょうか?

[質問の意図]
与えられた課題ならば、実際に小川先生のロジックでマクロを組む方が、正解だと考えます。
しかしながら、実際に業務でマクロを自力で作成する場合は、細かく結果を見ながら試行錯誤をして作りあげていくことになり、解答があるわけではありません。(誰かに善し悪しを指導してもらえるわけでもない)
よって、必ずしも、スマートで誰が見ても分かりやすいマクロになるとは限りませんし、結果(ゴール)オーライでマクロを作ることになります。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8058]各部署からファイルを回収し、記入済データを手元資料に統合その1

2017-04-26 10:54:13 受講生さんからの投稿です。

お世話様になっております。

"オブジェクトは、このプロパティまたはメソッドをサポートしていません。"というエラーが出ます。

この場合のエラーに対するマクロの記入例をご教授いただけませんでしょうか?

ご多忙中まことに恐れ入りますが、ご指導いただけますよう、よろしくお願い致します。



Sub file_get()

Dim moto '←元データ "aget.xls"
Dim saki '←転記先 "記入用.xls"
Workbooks.Open Filename:="C:\Users\NORIAKI\Desktop\sample\記入済ファイル置き場a" & "\" & "aget.xls"
For moto = 2 To 7
If Workbooks("aget.xls").WorkbooksSheets("歳入").Range("A" & moto).Value <> "" Then '←"オブジェクトは、このプロパティまたはメソッドをサポートしていません。"
For saki = 2 To 51
If Workbooks("記入用.xls").WorkbooksSheets("歳入").Range("A" & saki).Value = Workbooks("aget.xls").WorkbooksSheets("歳入").Range("A" & moto).Value Then
Workbooks("記入用.xls").WorkbooksSheets("歳入").Range("E" & saki).Value = Workbooks("aget.xls").WorkbooksSheets("歳入").Range("E" & moto).Value
Exit For
End If
Next
Else
Exit For
End If
Next

For moto = 2 To 4 '←行数(元データ)
If Workbooks("aget.xls").WorkbooksSheets("歳出").Range("A" & moto).Value <> "" Then
For saki = 2 To 41 '←行数(転記先)
If Workbooks("記入用.xls").WorkbooksSheets("歳出").Range("A" & saki).Value = Workbooks("aget.xls").WorkbooksSheets("歳出").Range("A" & moto).Value Then
Workbooks("記入用.xls").WorkbooksSheets("歳出").Range("E" & saki).Value = Workbooks("aget.xls").WorkbooksSheets("歳出").Range("E" & moto).Value
Exit For
End If
Next
Else
Exit For
End If
Next
Workbooks("aget.xls").Close

End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[8049]とびとびに存在するデータを拾って加工する

2017-04-25 05:21:01 受講生さんからの投稿です。

小川様
お世話になります。
マクロの質問ではないのですが、動画10分ころにif文を使って確認する場面がありますが、if文をコピーした後Ctrl+↓ だと、最終行まで選択されてしまうと思うのですが、190行までしかコピペされていません。いったいどうやったのですか。それとも最終行までコピペされたのをなにかショートカットで消しているのですか。細かい質問ですみません。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7795]VLookUp関数、Index関数、Match関数より便利なマクロ-該当する行が見つからない場合の処理をアレンジ

2017-03-07 14:33:39 新見陽子さんからの投稿です。

お世話になります。
①の問題で、 mitsuketa = False の上下にある変数の定義の順序を、以下のように入れ替えてマクロを実行した場合、
顧客リストのID1に一致するものが、キャンペーン応募状況の表にはないので、ID1が30行目に追加されそうな気がするのですが、
追加されません。それどころか、ID46、ID33も追加されませんでした。F8で動きを追ってみたのですが、
なぜ、無視されるのかわかりません。なぜなんでしょう?

Sub mondai201_01()
    Dim hida
    Dim migi
    Dim mitsuketa
    Dim tenkisaki
    
    tenkisaki = 30
    
    For hida = 4 To 29  '←ここと
        mitsuketa = False
        For migi = 11 To 21 '←ここです
            If Range("A" & hida).Value = Range("E" & migi).Value Then
                Range("C" & hida).Value = Range("F" & migi).Value
                mitsuketa = True
                Exit For
            End If
        Next
        If mitsuketa = False Then
            Range("A" & tenkisaki).Value = Range("E" & migi).Value
            Range("C" & tenkisaki).Value = Range("F" & migi).Value
            tenkisaki = tenkisaki + 1
        End If
    Next
    
End Sub

[ 続きを読む ]  返信件数:7件  [ 動画を見る] 

[7764]文字列を様々に解析して条件分岐

2017-02-28 16:04:47 新見陽子さんからの投稿です。

問題[2]で、>0を入れずに以下のように作成しても、マクロが実行されたのですが、なぜでしょうか?
マクロが気を利かせてくれたのでしょうか?これでも不都合はないですか?

Sub miyakojima()
    Dim gyo
    For gyo = 2 To 22
        If InStr(Range("B" & gyo).Value, "都島") Then
            Range("J" & gyo).Value = "都島グループです"
        End If
    Next
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7630]残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ

2017-02-09 07:05:36 受講生さんからの投稿です。

小川先生

コメント有難うございます。
「英単語1語の言葉」の選択には、要注意ですね。

「ハンガリアン記法」の動画を見直してみたいと思います。

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7604]残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ

2017-02-05 14:09:18 受講生さんからの投稿です。

小川先生

最大値が複数存在した場合についてのコードを投稿します。
よろしくお願いします。

【課題を以下の通り、設定しています。】
 問題[1] 一番得点の高い人が複数いた場合でも抽出可能にする
 問題[2] 残業時間が一番多い人が複数いた場合でも抽出可能にする
 問題[3] 残業時間が一番多い人が複数いた場合でも抽出可能にする

'**************************************************************
'問題[1] 一番得点の高い人が複数いた場合でも抽出可能にする
'**************************************************************

Sub katinuki()
    
    Dim gyou As Long
    Dim kati As Long
    
    '処理1
    kati = 2
    For gyou = 2 To 11
        If Range("G" & kati).Value < Range("G" & gyou).Value Then
            kati = gyou
        End If
    Next gyou
'    Range("J" & kati).Value = "最高点です" '←不要かも

    '処理2
    For gyou = 2 To 11
        If Range("G" & kati).Value = Range("G" & gyou).Value Then
            Range("J" & gyou).Value = "最高点です"
        End If
    Next gyou
End Sub

'**************************************************************
'問題[2] 残業時間が一番多い人が複数いた場合でも抽出可能にする
'**************************************************************

Sub kati2()

    Dim gyou As Long
    Dim Migi As Long
    Dim kati As Long
    
    '処理1
    kati = 6
    Migi = 4
    For gyou = 6 To 33
        If Range("C" & kati).Value < Range("C" & gyou).Value Then
            kati = gyou
        End If
    Next gyou
'    Range("K" & Migi).Value = Range("B" & kati).Value '←不要かも
'    Range("L" & Migi).Value = Range("C" & "5").Value  '←不要かも
'    Range("M" & Migi).Value = Range("C" & kati).Value  '←不要かも
   
    '処理2
    For gyou = 6 To 33
        If Range("C" & kati).Value = Range("C" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("C" & "5").Value
            Range("M" & Migi).Value = Range("C" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou
End Sub

'**************************************************************
'問題[3] 残業時間が一番多い人が複数いた場合でも抽出可能にする
'**************************************************************

Sub kati3()
    
    Dim gyou
    Dim Migi As Long '追加
    Dim kati
    Dim retu
    Migi = 4 '追加
    
    retu = "C"
    kati = 6
    
    '処理1
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("C" & gyou).Value Then
            retu = "D"
            kati = gyou
        End If
    Next gyou
    
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("D" & gyou).Value Then
            retu = "D"
            kati = gyou
        End If
    Next gyou
    
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("E" & gyou).Value Then
            retu = "E"
            kati = gyou
        End If
    Next gyou
    
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("F" & gyou).Value Then
            retu = "F"
            kati = gyou
        End If
    Next gyou
    
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("G" & gyou).Value Then
            retu = "G"
            kati = gyou
        End If
    Next gyou
    
    For gyou = 6 To 33
        If Range(retu & kati).Value < Range("H" & gyou).Value Then
            retu = "H"
            kati = gyou
        End If
    Next gyou
    
'    Range("K" & Migi).Value = Range("B" & kati).Value '←不要かも
'    Range("L" & Migi).Value = Range(retu & "5").Value '←不要かも
'    Range("M" & Migi).Value = Range(retu & kati).Value '←不要かも
    
    '処理2
    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("C" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("C" & "5").Value
            Range("M" & Migi).Value = Range("C" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou

    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("D" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("D" & "5").Value
            Range("M" & Migi).Value = Range("D" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou

    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("E" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("E" & "5").Value
            Range("M" & Migi).Value = Range("E" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou

    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("F" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("F" & "5").Value
            Range("M" & Migi).Value = Range("F" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou

    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("G" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("G" & "5").Value
            Range("M" & Migi).Value = Range("G" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou

    For gyou = 6 To 33
        If Range(retu & kati).Value = Range("H" & gyou).Value Then
            Range("K" & Migi).Value = Range("B" & gyou).Value
            Range("L" & Migi).Value = Range("H" & "5").Value
            Range("M" & Migi).Value = Range("H" & gyou).Value
            Migi = Migi + 1
        End If
    Next gyou
End Sub

[ 続きを読む ]  返信件数:5件  [ 動画を見る] 

[7578]とびとびに存在するデータを拾って加工する

2017-01-30 13:04:53 新見陽子さんからの投稿です。

はじめまして。2017年12月からこちらでマクロを勉強し始めました。
フォローアップでは、まず自分でマクロを作ってみてから答えや動画を見ています。
今回、自分で書いたマクロでは数列は使ってなかった(2015年2月5日の匿名さんと、そっくりのマクロでした)のですが、
動画では数列を使っていました。この式で数値がこう変わる、って結果はわかるのですが、自分でこの式を導き出す術がわかりません。
中学レベルの数列すら全く理解していないので、別サイトで数列の勉強からし直そうとしてみたのですが、
等差数列とかますます理解できなくなり絶望的になっています。
こんなことでは便利なマクロが作れるようにはなれそうにもない、と意気消沈。
やっぱり数列を理解できないと、先々発展できないでしょうか?

[ 続きを読む ]  返信件数:6件  [ 動画を見る] 

[7466]転記先ファイルを生成してデータを流し込む。

2017-01-01 16:34:59 受講生さんからの投稿です。

お世話になっております。
転記先のファイル名について一つ教えてください。
変数にするまでは「sample.xls」と、.xlsが付いていますが、最終的にfnameの変数に置き換え、「n,t,b」などのファイル名の言葉が入ってくるようになると思います。
その際文末に「&".xls"」は着ける必要はないのでしょうか。
ActiveWorkbook.SaveAs Filename:="D:\ks201-205\ks204\ks204_mondai\" & fname _
ActiveWorkbook.SaveAs Filename:="D:\ks201-205\ks204\ks204_mondai\" & fname&".xls" _


Sub ks204_02()
    Dim fname
    Dim moto
    Dim saki
    Dim slist
    For slist = 4 To 7
        fname = Workbooks("ks204.xls").Worksheets("List").Range("C" & slist).Value
        Workbooks.Open Filename:="D:\ks201-205\ks204\ks204_mondai\template.xls"
        ActiveWorkbook.SaveAs Filename:="D:\ks201-205\ks204\ks204_mondai\" & fname _'ここです。
            , FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7462]各部署からファイルを回収し、記入済データを手元資料に統合その2

2016-12-28 05:16:17 受講生さんからの投稿です。

小川様

お世話になります。
フォローアップ追加分の最後に記入済みデータを手元資料に統合という課題の
最後に追加データもとってくるというのがありますが

小川さんの模範解答には

If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value <> "" Then


というコードがありますで、そのコードがなくともできるのではないかとおもい
以下のコードを作成しましたが、追記データがとびとびになってうまくいきませんでした。
原因を探ろうとしましたがお手上げです。
ご指導よろしくお願いいたします。

Sub hukusyuu() '
    
    Dim foldername
    Dim filename
    Dim tuikanyu
    Dim tuikasyu
    tuikanyu = 52
    tuikasyu = 42
    
    Dim gyo
    For gyo = 2 To 10
    
    foldername = Workbooks("全部1つ.xls").Worksheets("部署情報").Range("F" & gyo).Value
    filename = Workbooks("全部1つ.xls").Worksheets("部署情報").Range("G" & gyo).Value
    
        Workbooks.Open filename:="D:\h引越し\s仕事関係\VBA\f基礎追加フォローアップ解凍ファイル\配布物 最後の課題用に改変\01-課題一式\" & foldername & "\" & filename
            
        Dim moto
        Dim saki
        Dim mituketa
        
        
        For moto = 2 To 51 '←ここと(moto)
            mituketa = False
            For saki = 2 To 51 '←ここ(saki)が逆ではだめ。つまりフラグはあくまでmotoを見に行ったとき、ない場合の処理なので
                If Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value = Workbooks("全部1つ.xls").Worksheets("歳入").Range("A" & saki).Value Then
                    Workbooks("全部1つ.xls").Worksheets("歳入").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                    mituketa = True
                    Exit For
                End If
            Next
            If mituketa = False Then
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("A" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("A" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("B" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("B" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("C" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("C" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("D" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("D" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳入").Range("E" & tuikanyu).Value = Workbooks(filename).Worksheets("歳入").Range("E" & moto).Value
                tuikanyu = tuikanyu + 1
            End If
        Next
        
        
        For moto = 2 To 41
            mituketa = False
            For saki = 2 To 41
                If Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value = Workbooks("全部1つ.xls").Worksheets("歳出").Range("A" & saki).Value Then
                    Workbooks("全部1つ.xls").Worksheets("歳出").Range("E" & saki).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
                    mituketa = True
                    Exit For
                End If
            Next
            If mituketa = False Then
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("A" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("A" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("B" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("B" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("C" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("C" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("D" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("D" & moto).Value
                Workbooks("全部1つ.xls").Worksheets("歳出").Range("E" & tuikasyu).Value = Workbooks(filename).Worksheets("歳出").Range("E" & moto).Value
                tuikasyu = tuikasyu + 1
            End If
        Next
        
        Workbooks(filename).Close
    Next
    
End Sub


[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7430]各資料ごとに1番からの番号を割り振る。AutoFill機能より便利なマクロ

2016-12-16 13:08:20 受講生さんからの投稿です。

if、elseを使って問題を解いてみました。
変数はfor next 構文の外で設定していれば、構文の下のコードには反映されないと勝手に思っていたのですが、
nextの下にコードを書いても、変数リセットの指示を小人ちゃんに出さなければ元に戻らないんですね!

Sub rensyu2()    
    Dim ban
    Dim gyo
    Dim cno
    ban = 0
    cno = 1
    For gyo = 4 To 19
        If Range("D" & gyo).Value <> Range("D" & gyo - 1).Value Then
            ban = ban + 1
            cno = 1
        Else
        cno = cno + 1
        End If
        Range("B" & gyo).Value = ban
        Range("C" & gyo).Value = cno
    Next
        
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7423]複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?

2016-12-15 16:58:29 受講生さんからの投稿です。

お世話になっております。一つこの例題について伺いたいことがあります。
もし、キャンペーン応募が同じ人から複数件あったとして、左の表の同じセルに「、」を打って複数件足していくような場合を想定して下記のようなコードを書きました。
しかし、F5で実行を押すたびに左の票の数が足されていってしまいます。修正箇所としてどの点を直せばよろしいでしょうか。
ご教授宜しくお願い致します。

Sub sakusei()
    Dim hida
    Dim migi
    Dim goukei

    For migi = 11 To 23

        For hida = 4 To 29
        goukei = Range("C" & hida).Value
               
            If Range("E" & migi).Value = Range("A" & hida).Value Then
             goukei = goukei & "," & Range("F" & migi).Value
            End If
        Range("C" & hida) = goukei
        Next
    Next
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7421]勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

2016-12-15 11:11:20 受講生さんからの投稿です。

お世話になっています。一つ聞きたいことがあります。
下記のように、 Range("D" & hida).Value = goukeiをfor next (migi)の構文内で実行すると、今月支払いのない成人祝いの欄は「空白」で表示されます。
構文外にこの式を置くと「0」と表示されるのですが、構文内に置くとなぜ「空白」になってしまうのでしょうか。
[code]Sub rensyu3()
Dim goukei
Dim migi
Dim hida
For hida = 4 To 9
goukei = 0
For migi = 4 To 10

If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
Range("D" & hida).Value = goukei
End If
Next
Next
End Sub[/code

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7264]勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

2016-11-06 12:02:44 受講生さんからの投稿です。

小川先生
お世話になっております。
単純ですが、シートにある勘定科目毎に伝票を集計し、合計を別シートのP/Lに書き出すマクロです。
1万行以上と金額が億単位だったので、マクロを動かしたら、ものすごくPCのスピードが落ちたので、
何10分まったら終わるのかとおもい途中でやめました。こういう場合はSUMIF関数の方がよいのでしょうか。
ちなみにPCのスペックは問題ありません。宜しくお願いします。

 Option Explicit
Sub hoge()
    Dim gyo As Long
    Dim goukei As Currency
    Dim kubun As Long
    For kubun = 12 To 226
        goukei = 0
        For gyo = 2 To 11419
            If Worksheets("4月 (2)").Range("C" & kubun).Value = Worksheets("Sheet1 (2)").Range("K" & gyo).Value Then
                goukei = goukei + Worksheets("Sheet1 (2)").Range("AE" & gyo).Value
            End If
                Worksheets("4月 (2)").Range("E" & kubun).Value = goukei
        Next
    Next
    
End Sub

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[7012]残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ

2016-09-07 20:05:40 ゲストさんからの投稿です。

残業時間が最大な人が複数いた時に該当者、全て抽出する方法は?

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[6705]セル内の文字列から区切り文字を見つけ、その区切り文字の間にある文字列を反映しつつデータ転記する

2016-06-08 05:31:39 関口昭博さんからの投稿です。

小川様

お世話になります。

動画を見たあと私が作ったプログラムですが
一点、模範解答と違うところがあります。
コメントしてるか所ですが、模範解答はato = Len(moji) + 1
となっていますが、私のはa=nです。

これでも動いたので、問題ないのか。それともこれではあとあと
うまくないのか、コメントいただけると幸いです。

ちなにみこのプログラムは同じシート(sheet1)に転記するようにしています。

Sub hukusyuu()
    Dim mae
    Dim ato
    Dim n
    Dim moji
    Dim migi
    migi = 11
    
    Dim gyo
    For gyo = 2 To 7
        moji = Range("D" & gyo).Value 
        mae = 0
        ato = 0
        For n = 1 To Len(moji)
            If Mid(moji, n, 1) = "、" Then 
                mae = ato
                ato = n
                Range("A" & migi) = migi - 10
                Range("B" & migi) = Range("A" & gyo).Value
                Range("C" & migi) = Range("B" & gyo).Value
                Range("D" & migi) = Range("C" & gyo).Value
                Range("F" & migi) = Range("E" & gyo).Value
                Range("E" & migi).Value = Mid(moji, mae + 1, ato - mae - 1)
                migi = migi + 1
            
            End If
            
        Next
        mae = ato
        ato = n '←その根拠がここと思っていたら→また新発見!for next構文を抜けた後nに格納された変数が+1された。
        Range("A" & migi) = migi - 10
        Range("B" & migi) = Range("A" & gyo).Value
        Range("C" & migi) = Range("B" & gyo).Value
        Range("D" & migi) = Range("C" & gyo).Value
        Range("F" & migi) = Range("E" & gyo).Value
        Range("E" & migi).Value = Mid(moji, mae + 1, ato - mae - 1)
        migi = migi + 1
    Next
    
End Sub

[ 続きを読む ]  返信件数:2件  [ 動画を見る] 

[6689]表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)

2016-06-01 17:11:08 ゲストさんからの投稿です。

動画その18の音声が小さくて聞き取れなのですが、大きくならないのでしょうか?

[ 続きを読む ]  返信件数:1件  [ 動画を見る] 

[6682]転記先シートを生成してデータを流し込む。

2016-06-01 07:42:35 受講生さんからの投稿です。

小川先生、こんにちは
VBAの勉強とても楽しくなってきました。 でも理解するのがむずかしいところ たくさんありますが。
今回は 変数を入れる場所を考えるヒントを教えてほしいです。
10:12のところで、シートt, p, bを作成する際、Dim moto Dim saki ともに
変数を宣言する場所を変えた理由をお聞きしたいのです。その確認をして、これから違うものを作成する際に ヒントにしたいと思いますので。
宜しくお願いいたします。 

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 

[6649]データ記入用ファイルを配布する-その1

2016-05-20 11:35:21 多和田 真也さんからの投稿です。

小川先生 質問させて下さい。

同じひな型で約50社分のクライアントの財務分析用エクセルシートを作成しています。
そのひな型のごく一部を変更する必要が出てきました。

すでに会社ごとの財務データを入力してあるので、変更する部分だけを、for next構文を使って書換えようと
しています。

すべてのシートを.xlsmで作っているのですが、マクロを作成して実行してみると、一つのファイルを書き換えて、
保存する際に、毎回『プライバシーに関する注意』というダイアログが出てきて、ダイアログのボタンをマウスでクリック
しないと次に進めないため、ファイル数だけ手作業が発生してしまっています。

この問題の、解決方法はないでしょうか。いちいちクリック動作をしないで、マクロで一気に実行できるようにしたいです。

ちなみに、エクセルのバージョンは2007です。

[ 続きを読む ]  返信件数:3件  [ 動画を見る] 


各講座ごとのメッセージを見る場合はこちら

 

まずはここから!スマホでも学べる無料動画講座

今なら先着30名限定で無料!定価4,800円の、初心者のためのエクセルマクロ動画講座。
  1. Excel 97~Excel 2016まですべて対応。動画本数20本、総再生時間2時間44分53秒
  2. PC, Mac, iPhone, iPad, Androidのお好みの環境で、いつでも好きなときに学べます。
2004年から10年間述べ3,000名以上に実施した研修の経験と実績を集約した講座です。
いますぐ無料で試してください。

トップへ