• ベストアンサー

VBA エクセル バレーボールの得点板 作りたい

自分はVBA初心者のものです。VBAを使ってバレーボールの得点版のような、試合の流れがわかる A  B 1 2    1 3 このような物を作りたいと考えております。自分は一つのセルに+1する方法はわかるのですが、このような形のも野の作り方はわからないです。詳しい方いらっしゃいましたら是非教えていただきたいです

質問者が選んだベストアンサー

  • ベストアンサー
  • kon555
  • ベストアンサー率52% (1761/3379)
回答No.5

 バレーなどの得点と言うことは、例えば実際の試合などを観つつ記録していくような形でしょうか?  とするとボタン操作などで加点していくのが簡単だと思います。  まず得点表としては1行目を表題欄にします。A1セルに「A」B1セルに「B」、C1セルに「総得点」と入力し、A2、B2、C2を「0」と表記して下さい。  これで表のベースは完成です。シンプルなので画像は割愛します。  あとは下記の「A得点」「B得点」の2つのマクロを実行すると、お望みの形で得点表が作成されていきます。  C2セルにはその時点の両チームの総得点が表示されています。邪魔なら非表示して下さい。  適当な図形などにマクロ登録し、得点をクリックで記録する形が使い易いと思います。もしリアルタイムで観戦しながら得点表にを記録するならショートカットが便利かもしれないですが、その辺りはご自由に。 Sub A得点() Dim i As Long, s As Long i = 3 + Range("C2").Value s = Cells(Rows.Count, 1).End(xlUp) Cells(i, 1) = s + 1 Range("C2") = Range("C2") + 1 End Sub Sub B得点() Dim i As Long, s As Long i = 3 + Range("C2").Value s = Cells(Rows.Count, 2).End(xlUp) Cells(i, 2) = s + 1 Range("C2") = Range("C2") + 1 End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率65% (1626/2468)
回答No.4

No.2の補足です。 色々とっちらかってすみませんm(__)m WorksheetFunction.Maxを使わずにやる場合です。こちらが普通な感じです。 Sub CountUp(ByVal mCol1 As String, mCol2 As String) Dim LastRow1 As Long Dim LastRow2 As Long Dim mRow As Long LastRow1 = Cells(Rows.Count, mCol1).End(xlUp).Row LastRow2 = Cells(Rows.Count, mCol2).End(xlUp).Row If LastRow1 > LastRow2 Then mRow = LastRow1 Else mRow = LastRow2 End If '最終行が1行目だと2行目にする If LastRow1 = 1 Then LastRow1 = 2 End If Cells(mRow + 1, mCol1).Value = Cells(LastRow1, mCol1) + 1 End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1626/2468)
回答No.3

No.1 No.2の補足です。 一行目が数値だとそこから加算されていきます。一行目に数値が入る可能性がある場合は WorksheetFunction.Max(Range(Cells(2, mCol1), Cells(LastRow1 + 1, mCol1))) + 1 これにしておくと1行目が無視されますので、一行目が数値でも文字でも影響がなくなります。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1626/2468)
回答No.2

No1の補足です。 代入式を一行にしたい場合は(例は一か所にした方の場合) Sub CountUp(ByVal mCol1 As String, mCol2 As String) Dim LastRow1 As Long Dim LastRow2 As Long Dim mRow As Long LastRow1 = Cells(Rows.Count, mCol1).End(xlUp).Row LastRow2 = Cells(Rows.Count, mCol2).End(xlUp).Row If LastRow1 > LastRow2 Then mRow = LastRow1 Else mRow = LastRow2 End If Cells(mRow + 1, mCol1).Value = WorksheetFunction.Max(Cells(2, mCol1), Cells(LastRow1, mCol1)) + 1 End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1626/2468)
回答No.1

TestAはA列の加算用でTestBはB列加算用です。 2行目から開始します。 Sub TestA() Dim LastRowA As Long Dim LastRowB As Long LastRowA = Cells(Rows.Count, "A").End(xlUp).Row LastRowB = Cells(Rows.Count, "B").End(xlUp).Row If LastRowA > LastRowB Then Cells(LastRowA + 1, "A").Value = WorksheetFunction.Max(Range(Cells(2, "A"), Cells(LastRowA, "A"))) + 1 Else Cells(LastRowB + 1, "A").Value = WorksheetFunction.Max(Range(Cells(2, "A"), Cells(LastRowA, "A"))) + 1 End If End Sub Sub TestB() Dim LastRowA As Long Dim LastRowB As Long LastRowA = Cells(Rows.Count, "A").End(xlUp).Row LastRowB = Cells(Rows.Count, "B").End(xlUp).Row If LastRowA > LastRowB Then Cells(LastRowA + 1, "B").Value = WorksheetFunction.Max(Range(Cells(2, "B"), Cells(LastRowB, "B"))) + 1 Else Cells(LastRowB + 1, "B").Value = WorksheetFunction.Max(Range(Cells(2, "B"), Cells(LastRowB, "B"))) + 1 End If End Sub 上記で同じようなコードを一か所にしたものが以下です。 Sub TestA2() Call CountUp("A", "B") End Sub Sub TestB2() Call CountUp("B", "A") End Sub Sub CountUp(ByVal mCol1 As String, mCol2 As String) Dim LastRow1 As Long Dim LastRow2 As Long LastRow1 = Cells(Rows.Count, mCol1).End(xlUp).Row LastRow2 = Cells(Rows.Count, mCol2).End(xlUp).Row If LastRow1 > LastRow2 Then Cells(LastRow1 + 1, mCol1).Value = WorksheetFunction.Max(Range(Cells(2, mCol1), Cells(LastRow1, mCol1))) + 1 Else Cells(LastRow2 + 1, mCol1).Value = WorksheetFunction.Max(Range(Cells(2, mCol1), Cells(LastRow1, mCol1))) + 1 End If End Sub Max使うのは2行目に最初の値を入れるときに1行目が文字列だった場合単に Cells(LastRow1, mCol1) + 1 とするとエラーになるのでそれを避けるためです。他にも方法があると思いますが今回はこれで。 また今回の場合は WorksheetFunction.Max(Range(Cells(2, mCol1), Cells(LastRow1, mCol1))) + 1 は WorksheetFunction.Max(Cells(2, mCol1), Cells(LastRow1, mCol1)) + 1 でもいけます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA バレーボールの得点版のようなもの 再掲載

    自分はVBA初心者のものです。VBAを使ってバレーボールの得点版のような、試合の流れがわかる A  B 1 2    1 3 このような物を作りたいと考えております。自分は一つのセルに+1する方法はわかるのですが、このような形のものの作り方はわからないです。詳しい方いらっしゃいましたら是非教えていただきたいです 皆さん回答ありがとうございました。加えて自分は、シート2にあるボタンを押すと、シート1の得点版に加算されるといったような形をとりたいのですが、教えてもらったコードを自分なりに書き換えても難しかったです。可能であれば教えていただきたいです

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • エクセルVBAで

    いつもお世話になります。 変数A(1),A(2)・・・A(n)で小さい順にB(1),B(2)・・・B(n)と置き換える事は可能でしょうか? セルにAnをいれて、並び替えをしてからBnにいれる方法は分かるんですが。VBA上で可能でしょうか? 宜しくお願いします。

  • エクセルVBAでブック間のコピーをしたい。

    エクセルVBAでブック間のコピーをしたい。 エクセルのVBA初心者です。 複数のブックが開いている時(ブックA,B,C...)に、今選択しているブックAのあるセルを、直前に選んでいたブックBやC(そのつど変わります)にコピーする方法は有りますでしょうか? どなたか教えて下さい。

  • エクセルVBAについて教えてください

    エクセルVBAを勉強中のものです。 仕事でVBAが必要になり勉強しながら作成をしています。 作成したいのはシフト表になるのですが、1年分をまとめて作成するため、最初に一旦空白セルに、ある一定の規則性を持った文字を入力したいのです。 その規則というのが ・入力する文字はA、B、C、Dの4種のうちどれかである ・同じ文字が入力されたセルが5つ続いたのちは、次の文字に移る(A、A、A、A、A、B、B、B、B…というように) ・夏季休業等、×の付いた部分は入力しない というものです。 なおかつ、前年度のデータからの引き継ぎで作成するため、スタートがバラバラです。(添付の画像通り) 休暇の列は5連勤した後1休、という規則です。 VBAと関数を併用するのでも構いません。 関数のみでできるのなら、それでも構いません。 初心者の私にぜひ教えていただけないでしょうか…。 よろしくお願いします。

  • エクセルVBAで

    エクセルのVBAでやりたいことがあるのですが、 一枚のシートのセルA1に1が入っているとします。そこで自動でA2に2、B1に3、B2に4といったようにセルの値を一つずつ増やていったものを連番で10枚印刷しようと考えているのですがうまくいきません。ご教授願います。

  • エクセルVBA 画像にハイパーリンク

    VBA初心者です。 A1からA100まで、サムネイル画像があります。 B1からB100までのセルに、ハイパーリンクURLがあります。 このハイパーリンクURLを、A1からA100までのサムネイル画像(図の番号が順不同)にいれたいので、よい方法をご教授ねがいます。

  • エクセル上のVBA

    当方、VBAまるっきり初心者です(触りはじめて3日くらい)。 エクセルはある程度理解しているつもりですが… バージョンはエクセル2000です。 他シートのセルのひとつに入力すれば、 別シートのセルがそれを参照したうえで 値として表示出来るようにならないでしょうか。  今のところ、以下のような状況です。 step01 sheet1のセルA1に任意の数値(整数限定です)を入力。 step02 sheet2のセルA1に、sheet1のセルA1の数値を用いて     MOD関数で余りを出す。 step03 sheet2のセルB2に以下のVBAによって     step02の余りを値として表示。      Private Sub Worksheet_Change(ByVal Target As Range)        Range("b2").Value = Range("a1")      End Sub  これだとsheet1の数字を変えても、 sheetの切替後sheet2のセルB2に 表示される値が変わってくれません。  最初の入力(step01の入力)をおこなえば sheet2のセルB2まで値が変わってくれるような方法を 教えていただけないでしょうか。  拙い説明で申し訳ありませんが、よろしくお願いします。

  • VBAを使うしかない??

     A2→A3→B2→B3→C6 というようにセルを移動するにはVBAを使うしかないのでしょうか?  ちなみにVBAはほとんどわかりませんw ※コントロールキーを押して、そのセルをクリックすればよい という方法があるような気がしますが、その方法は却下です。

  • エクセルVBAでの文字列抽出

    エクセルVBAで文字列を検索して、検索した文字列を他のセルへ出力する方法がわかる方法を探しております。状況を図で説明すると、 A1セル:aaa\bbb\item1\ddd A2セル:aaa\bbb\ccc\item2\ddd A3セル:aaa\bbb\ccc\ddd\item3\eee このような状態からitemを検索して、B1セルに B1セル:item1 B2セル:item2 B3セル:item3 と表示させたいです。エクセルVBA初心者な者でRegExpを使うのかな、というところまではたどり着きましたが、そこから先にすすめません。 何か良い方法をご存知の方、教えていただきたいです。よろしくお願いいたします。

専門家に質問してみよう