Sub 入力()
Dim hiduke As String
ActiveWindow.NewWindow
ActiveWindow.NewWindow
Windows.Arrange ArrangeStyle:=xlTiled
Windows("第6章.xlsm:2").Activate
Sheets("得意先リスト").Select
Windows("第6章.xlsm:1").Activate
Sheets("商品リスト").Select
Windows("第6章.xlsm:3").Activate
If Range("C6").Value = "" Then
Range("C6").Select
Else
Range("C5").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If
Do While ActiveCell.Offset(0, -1).Value <> ""
hiduke = InputBox("日付を入力してください" & Chr(13) & "日付入力を終了する場合にはキャンセルボタンを押してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(1)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 1).Range("A1").Select
hiduke = InputBox("得意先コードを入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(2)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 2).Range("A1").Select
hiduke = InputBox("商品コードを入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(3)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(O, 4).Range("A1").Select
hiduke = InputBox("数量を入力してください", , , 200, 200)
If hiduke = "" Then
MsgBox "入力をキャンセルします(4)"
Exit Do
Else
ActiveCell.FormulaR1C1 = hiduke
ActiveCell.Offset(1, -7).Range("A1").Select
End If
End If
End If
End If
Loop
Windows("第6章.xlsm:2").Activate
ActiveWindow.Close
Windows("第6章.xlsm:1").Activate
ActiveWindow.Close
ActiveWindow.WindowState = xlMaximized
End Sub
2013年1月23日水曜日
追加課題(1/23)
シート「6月度」(販売一覧)の販売データを入力するプログラムにおいて,キャンセルボタンを押すことで処理を中断できるようにせよ.
ラベル:
[2012]ExcelVBA
2013年1月16日水曜日
追加課題(1/16)
シート「商品リスト」において,商品を追加する際に使用する対話的なプログラムを作成せよ.
方針:InputBox関数を利用.追加課題(12/28)を参考に,商品リストの最終行に移動し,そこから入力を開始.入力したセルの周囲に罫線を引く.
1.商品リストの最終行左端に移動
2.InputBoxを実行し,ユーザーが入力した商品コードを受け取る
3.商品コードをセルに書き込む
4.セルの周囲に罫線を引く
5.一つ右のセルに移動
(2~5を繰り返す)
6.完成!
6-1.素直に繰り返した場合
6-2.データの受付を最初に行い,まとめて書き込みを行う場合
6-3.二次元配列を用いてデータを格納した場合
6-4.プログラム内の同じ処理を行う部分をまとめた場合
6-5.ループを1つにまとめた場合
方針:InputBox関数を利用.追加課題(12/28)を参考に,商品リストの最終行に移動し,そこから入力を開始.入力したセルの周囲に罫線を引く.
1.商品リストの最終行左端に移動
Sub 商品追加()
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
End Sub
2.InputBoxを実行し,ユーザーが入力した商品コードを受け取る
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
3.商品コードをセルに書き込む
ActiveCell.Value = syouhinCode
4.セルの周囲に罫線を引く
ActiveCell.BorderAround ColorIndex:=1
5.一つ右のセルに移動
ActiveCell.Offset(0, 1).Select
(2~5を繰り返す)
6.完成!
6-1.素直に繰り返した場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
'商品コードを入力
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を入力
syouhinCode = InputBox("商品名を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を入力
syouhinCode = InputBox("色を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を入力
syouhinCode = InputBox("単価を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を入力
syouhinCode = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を入力
syouhinCode = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-2.データの受付を最初に行い,まとめて書き込みを行う場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
'商品コードを受付
Dim syouhinCode As String
syouhinCode = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
'商品名を受付
Dim syouhinName As String
syouhinName = InputBox("商品名を入力してください", "商品追加", , 100, 100)
'色を受付
Dim syouhinColor As String
syouhinColor = InputBox("色を入力してください", "商品追加", , 100, 100)
'単価を受付
Dim syouhinTanka As String
syouhinTanka = InputBox("単価を入力してください", "商品追加", , 100, 100)
'輸入国を受付
Dim syouhinYunyuu As String
syouhinYunyuu = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
'入荷状況を受付
Dim syouhinNyuuka As String
syouhinNyuuka = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
'商品コードを書込
ActiveCell.Value = syouhinCode
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を書込
ActiveCell.Value = syouhinName
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を書込
ActiveCell.Value = syouhinColor
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を書込
ActiveCell.Value = syouhinTanka
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を書込
ActiveCell.Value = syouhinYunyuu
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を書込
ActiveCell.Value = syouhinNyuuka
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-3.二次元配列を用いてデータを格納した場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
'商品コードを受付
shouhin(0, 0) = InputBox("商品コードを入力してください", "商品追加", , 100, 100)
'商品名を受付
shouhin(1, 0) = InputBox("商品名を入力してください", "商品追加", , 100, 100)
'色を受付
shouhin(2, 0) = InputBox("色を入力してください", "商品追加", , 100, 100)
'単価を受付
shouhin(3, 0) = InputBox("単価を入力してください", "商品追加", , 100, 100)
'輸入国を受付
shouhin(4, 0) = InputBox("輸入国を入力してください", "商品追加", , 100, 100)
'入荷状況を受付
shouhin(5, 0) = InputBox("入荷状況を入力してください", "商品追加", , 100, 100)
'商品コードを書込
ActiveCell.Value = shouhin(0, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'商品名を書込
ActiveCell.Value = shouhin(1, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'色を書込
ActiveCell.Value = shouhin(2, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'単価を書込
ActiveCell.Value = shouhin(3, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'輸入国を書込
ActiveCell.Value = shouhin(4, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
'入荷状況を書込
ActiveCell.Value = shouhin(5, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
End Sub
6-4.プログラム内の同じ処理を行う部分をまとめた場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
'データの受取
Dim i As Integer
For i = 0 To 5
shouhin(i, 0) = InputBox(shouhin(i, 1) + "を入力してください", "商品追加", , 100, 100)
Next i
'データの書込
Dim j As Integer
For j = 0 To 5
ActiveCell.Value = shouhin(j, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
Next j
End Sub
6-5.ループを1つにまとめた場合
Sub 商品追加()
'表の最終行に移動
Range("B5").Select
Do While Not (ActiveCell.Value = "")
ActiveCell.Offset(1, 0).Select
Loop
Dim shouhin(5, 1) As String
shouhin(0, 0) = ""
shouhin(0, 1) = "商品コード"
shouhin(1, 0) = ""
shouhin(1, 1) = "商品名"
shouhin(2, 0) = ""
shouhin(2, 1) = "色"
shouhin(3, 0) = ""
shouhin(3, 1) = "単価"
shouhin(4, 0) = ""
shouhin(4, 1) = "輸入国"
shouhin(5, 0) = ""
shouhin(5, 1) = "入荷状況"
Dim i As Integer
For i = 0 To 5
shouhin(i, 0) = InputBox(shouhin(i, 1) + "を入力してください", "商品追加", , 100, 100)
ActiveCell.Value = shouhin(i, 0)
ActiveCell.BorderAround ColorIndex:=1
ActiveCell.Offset(0, 1).Select
Next i
End Sub
ラベル:
[2012]ExcelVBA
追加課題(1/15)
色検索プログラムをIf文のみで実装せよ.
(P168 MsgBox関数の戻り値参照)
輸入国検索プログラムもIf文のみで実装せよ.
(P168 MsgBox関数の戻り値参照)
Sub 色検索()
Dim iro As Integer
iro = MsgBox("ワインの色は赤ですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "赤"
Else
iro = MsgBox("ワインの色は白ですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "白"
Else
iro = MsgBox("ワインの色はロゼですか?", vbYesNo)
If iro = 6 Then
Range("B5").Select
Selection.AutoFilter 3, "ロゼ"
Else
MsgBox "選択が間違っています" & Chr(13) & _
"赤、白、ロゼの中から選択してください", vbOKOnly + vbExclamation
End If
End If
End If
End Sub
輸入国検索プログラムもIf文のみで実装せよ.
Sub 輸入国検索()
Dim kuni As Integer
kuni = MsgBox("輸入国はイタリアですか?", vbYesNo)
If kuni = 6 Then
Range("B5").Select
Selection.AutoFilter 5, "イタリア"
Else
kuni = MsgBox("輸入国はフランスですか?", vbYesNo)
If kuni = 6 Then
Range("B5").Select
Selection.AutoFilter 5, "フランス"
Else
MsgBox "入力が間違っています" & Chr(13) & _
"イタリア,フランスのいずれかを入力してください", vbOKOnly + vbExclamation
End If
End If
End Sub
ラベル:
[2012]ExcelVBA
2012年12月28日金曜日
追加課題(12/28)
追加課題
既存のエクセル内の表に対して
A.一番上の行を見出し行と見なし,黒背景白文字ボールドセンタリングを行う
B.2行目以下について,偶数行と奇数行で背景色を交互に塗り分け
を実現
ここで,実装するべき機能は
1.選択されたセルを開始位置として,そこから表が続く限り処理を繰り返す
(表が終われば処理終了)
2.1つめのif文で1行目か否かを判別し,1行目ならばAの処理を実行
3.2つめのif文で2行目移行と判別できたら,その行が奇数行か偶数行か判別
3-1.奇数行だった場合,少し薄めの色で背景を塗る
3-2.偶数行だった場合,奇数行よりも少し濃いめの色で背景を塗る
です.
1.横方向に移動し,セルの内容を表示するプログラム
+行末までたどり着いたら自動的に改行
+行末までたどり着いたら自動的に改行
+表の左端まで移動
+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+移動後の行に対しても同様の処理を行う
=任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
+行数把握
+行数把握
+1行目とその他の行で処理分岐
+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+各行にあわせた処理を記述
| 見出し1 | 見出し2 | 見出し3 | 見出し4 | 見出し5 |
| 内容11 | 内容12 | 内容13 | 内容14 | 内容15 |
| 内容21 | 内容22 | 内容23 | 内容24 | 内容25 |
| 内容31 | 内容32 | 内容33 | 内容34 | 内容35 |
| 内容41 | 内容42 | 内容43 | 内容44 | 内容45 |
| 内容51 | 内容52 | 内容53 | 内容54 | 内容55 |
既存のエクセル内の表に対して
A.一番上の行を見出し行と見なし,黒背景白文字ボールドセンタリングを行う
B.2行目以下について,偶数行と奇数行で背景色を交互に塗り分け
を実現
ここで,実装するべき機能は
1.選択されたセルを開始位置として,そこから表が続く限り処理を繰り返す
(表が終われば処理終了)
2.1つめのif文で1行目か否かを判別し,1行目ならばAの処理を実行
3.2つめのif文で2行目移行と判別できたら,その行が奇数行か偶数行か判別
3-1.奇数行だった場合,少し薄めの色で背景を塗る
3-2.偶数行だった場合,奇数行よりも少し濃いめの色で背景を塗る
です.
1.横方向に移動し,セルの内容を表示するプログラム
Sub ironuri1()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
End Sub
2.縦方向に移動し,セルの内容を表示するプログラム
Sub ironuri2()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(1, 0).Select
Loop
End Sub
3.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
Sub ironuri3()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(1, 0).Select
End Sub
4.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+表の左端まで移動
Sub ironuri4()
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(1, -5).Select
End Sub
5.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
Sub ironuri5()
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(1, (-i + 1)).Select
End Sub
6.横方向に移動し,セルの内容を表示するプログラム+行末までたどり着いたら自動的に改行
+「任意の大きさの」表の左端まで移動
+移動後の行に対しても同様の処理を行う
=任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム
Sub ironuri6()
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
7.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
Sub ironuri7()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
MsgBox ActiveCell.Value & ", " & j & "行目"
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
8.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
Sub ironuri8()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)"
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
9.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
Sub ironuri9()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
Else
If (j Mod 2) = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
End If
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
10.任意の表の各セル全範囲を移動し,セルの内容を表示するプログラム+行数把握
+1行目とその他の行で処理分岐
+2行目以降の奇数行・偶数行で処理分岐
+各行にあわせた処理を記述
Sub ironuri10()
Dim j As Integer
j = 1
Do While Not (ActiveCell.Value = "")
Dim i As Integer
i = 1
Do While Not (ActiveCell.Value = "")
If j = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行です)"
ActiveCell.Font.Bold = True
ActiveCell.Font.ColorIndex = 2
ActiveCell.Interior.ColorIndex = 1
Else
If (j Mod 2) = 1 Then
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(奇数行)"
ActiveCell.Interior.ColorIndex = 15
ActiveCell.BorderAround ColorIndex:=1
Else
MsgBox ActiveCell.Value & ", " & j & "行目(見出し行ではありません)(偶数行)"
ActiveCell.Interior.ColorIndex = 48
ActiveCell.BorderAround ColorIndex:=1
End If
End If
ActiveCell.Offset(0, 1).Select
i = i + 1
Loop
ActiveCell.Offset(0, (-i + 1)).Select
ActiveCell.Offset(1, 0).Select
j = j + 1
Loop
End Sub
ラベル:
[2012]ExcelVBA
2012年12月25日火曜日
Select-Caseステートメント SAMPLE(Excel VBA)
shiken3()
waribiki()
iro()
Sub shiken3()
Dim tensuu As Integer
tensuu = Range("C26").Value
If tensuu >= 80 Then
MsgBox "合格です"
Else
If tensuu >= 60 Then
MsgBox "追試です"
Else
MsgBox "不合格です"
End If
End If
End Sub
waribiki()
Sub waribiki()
Dim kingaku As Currency
kingaku = Range("C33").Value
If Range("D33").Value = "一般" Then
If kingaku >= 50000 Then
MsgBox "一般:15%割引です"
Else
If kingaku >= 30000 Then
MsgBox "一般:10%割引です"
Else
If kingaku >= 10000 Then
MsgBox "一般:5%割引です"
Else
MsgBox "一般:割引なしです"
End If
End If
End If
Else
If Range("D33").Value = "会員" Then
If kingaku >= 50000 Then
MsgBox "会員:30% 割引です"
Else
If kingaku >= 30000 Then
MsgBox "会員:20%割引です"
Else
If kingaku >= 10000 Then
MsgBox "会員:10%割引です"
Else
MsgBox "会員:割引なしです"
End If
End If
End If
End If
End If
End Sub
iro()
Sub iro()
Select Case Range("C34").Value
Case "RED"
strIro = "RED"
Case "BLUE"
strIro = "BLUE"
Case "PINK"
strIro = "PINK"
Case "GREEN"
strIro = "GREEN"
Case Else
strIro = "RED.BLUE.PINK.GREENのいずれかを入力してください"
End Select
MsgBox strIro
End Sub
ラベル:
[2012]ExcelVBA
登録:
投稿 (Atom)