エクセラのEXCEL
表計算ソフトEXCELでゲーム等を作っています。ゲーム等の作成状況を紹介。
文字(式)の計算
セルに計算式を文字として入力してあり(例えば 1+1)、
この部分を計算したい場合があった。
どのようにして計算すればよいのか調べて見ると
Evaluateを使えば計算できることが分かった。
Function calc(a)
    calc = Evaluate(a)
End Function
どこかのセルで =calc(計算したいセル)で計算可能。
最近、エクセルで出来ないものはないような気がしてきた。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

がんばれ日本
子供達が寝て、VBAゲームプログラミングのチャンスと、22時からPCに向かう。しかし、サッカークロアチア戦が気になって、キーボードに手が行かなかった。前半戦終了でこれから後半戦。今日はPCはやめておこう。

テーマ:日記 - ジャンル:日記

EXCELでレトロゲーム

エクセルでゲームを作っています。キャラクターはオートシェイプで作成。
昨晩、手抜きですが、ゼビウスのなかでも好きなキャラクターを作成することができました。
キャラクター作成はVBAのコーディングと比較するとつまんない。早くキャラクターを作り上げでコード作成をしたい。


20060618131602.jpg



テーマ:ゲーム製作 関連 - ジャンル:ゲーム

EXCELでレトロゲーム

ゾシーのキャラクターを作って見た。オートシェープで線と円を組み合わせ、グループ化させ、名前"shape31"を登録
VBAで
  ActiveSheet.Shapes("shape31").Rotation = 0~360度
で回転させた。
エクセルでキャラクターを作るのはVBAより難しい。
ZOSHI

テーマ:日記 - ジャンル:日記

今日も人のためにVBAを

1つのデータが2行に渡って入力されており、それが200件を超えており、2行を1行にまとめる次のようなマクロを作ってあげた。
Sub test()
    Dim i As Long, j As Long
    Application.ScreenUpdating = False
    Rows("7:7").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="計"
    Rows("10:2000").Select
    Selection.Delete Shift:=xlUp
    Selection.AutoFilter
    For i = Range("C65535").End(xlUp).Row To 9 Step -2
        For j = 1 To 16
            Cells(i, j) = Cells(i - 1, j) & Cells(i, j)
        Next
        Range(i - 1 & ":" & i - 1).Delete
    Next
    Application.ScreenUpdating = True
    Range("A8").Select
End Sub
オートフィルターで、不必要な行(ここでは”計”となっている行)を削除し、2行を1行にして、不要な1行を削除。
当然、Application.ScreenUpdatingをFalseにして、作業速度アップ。たいしたマクロではないが、普段マクロを使うことのない人にとっては驚きのようだ。
またこの間、とある会社から、お金を払うからVBAを作ってくれないかと、メールで依頼があったが、簡単だったので、ただで作ってあげたらこれまた非常に喜んでくれた。
そんなにすごいことをした訳ではないが、チョッピリうれしかった。

テーマ:プログラミング - ジャンル:コンピュータ

EXCELでレトロゲーム

オートシェープを.ThreeDで3D化して、
.ThreeD.RotationX や.ThreeD.RotationYでオートシェープを回転させて
敵キャラクターを表現しようとしていた。

3D化の例
With ActiveSheet.Shapes("shape21").ThreeD
    .Visible = True
    .Depth = 5
    .ExtrusionColor.RGB = RGB(255, 255, 255)
    .SetExtrusionDirection msoExtrusionTop
    .PresetLightingDirection = msoLightingLeft
End With
回転の例
ActiveSheet.Shapes("shape21").ThreeD.RotationX = -90~90°


トーロイドやバキュラはオートシェイプが一つであるため
この方法で簡単に回転できるが、タルケン、カピ、テラジ等の
複数のオートシェイプを組み合わせて作ったキャラクターは、
とんでもないことになる。う~ん、こまったものだ。

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

EXCELでレトロゲーム

ようやく敵も攻撃するようになった。
しかし、なんか変な攻撃だ。
作り直したほうがよさそうだ。
敵の攻撃

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

無駄なことをやっていた

標準で装備されている関数を何度か作ったことがある。
これ以外でも、まだ気が付かずに無駄なことをたくさんやっているんだろうな~


1.文字の色
 VBAの場合
  Function color(a As Range) As Long
    color = a.Font.ColorIndex
  End Function


 VBAを使わない方法
  挿入-名前-定義
  名前:色
  参照範囲:=GET.CELL(24,A1)


2.ファイル名の表示
 VBAの場合
  Function filename()
     filename = ActiveWorkbook.Name
  End Function


 VBAを使わない場合1
  =REPLACE(LEFT(CELL("filename"),FIND("]",CELL("filename"))-1),1,FIND("[",CELL("filename")),)


 VBAを使わない場合2
  名前定義
  名前:ファイル名
  参照範囲:=GET.DOCUMENT(88)



3.Find関数があるのにわざわざinstr関数を作ってしまった
 VBAの場合
  Function instr(a As Range, b As String)
     instr = InStr(a.Value, b)
   End Function
 
 VBAを使わない場合  
  FIND関数


4.replace関数があるのにわざわざ同じものをつくってしまった
 無駄な例
  Function replace(a As String, b As String, c As String)
     Dim e As Variant
     e = Split(a, b)
     replace = Join(e, c)
  End Function


 Sub test()
    MsgBox replace("abcdefg", "cde", "")
 End Sub


 実はこれでだけでいい
  Sub test2()
   MsgBox Replace("abcdefg", "cde", "zzz")
  End Sub


 

テーマ:プログラミング - ジャンル:コンピュータ

EXCELでレトロゲーム
同僚で、EXCEL VBAのゲーム作成の良き理解者であるY野君と、
一緒に飲んだ。
話題で、今作ろうとしている作品の疑問点等、有益な情報を
GET!
今後の作品の制作スピードがアップしそう。
ありがとうY野君。でも、酔っぱらっているから、明日になったら
忘れているかも。
覚えていたら、お礼に、今度、VBAを教えてあげるね。

テーマ:日記・雑記 - ジャンル:ゲーム

画像データの貼り付け時にJPEG化

画像編集ソフト(PAINTSHOP、PHOTOSHOP,PHOTO EDITOR)で、画像をコピーし、
EXCELに貼り付けることがよくある。
元のファイルがJPEGであってもこの方法だとビットマップになり、膨大な
EXCELファイルになってしまう。
貼り付けるときに次のマクロを使うことで、自動的にJPGにしてくれるので、
愛用しています。


Sub bmp2jpg()
    ActiveSheet.Paste
    With Selection
        .ShapeRange.Line.Visible = msoFalse
        .Copy
        .Delete
    End With
    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False,DisplayAsIcon:=False
End Sub


やっていることは、
ビットマップで貼り付け後、コピー、形式を選択して貼り付け 図 (JPEG)で
貼り付ける形式を"図 (JPEG)"にしているだけ。
エラーチェックをしていないので、時々エラーが出ることがあります。

テーマ:プログラミング - ジャンル:コンピュータ

データの重複入力を避ける

データ入力時に重複を避けたいので、次のようにした
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        For i = 1 To .Row
            If .Value <> "" Then
                If .Value = Cells(i, .Column) Then
                    MsgBox "重複しています"
                    .Select
                    Exit For
                End If
            End If
        Next
    End With
End Sub


入力規則でできるのでは?と言われたので、やってみた。
例)B列の設定
入力規則で
ユーザー設定 =COUNTIF(B:B,B1)=1
ついでに条件付書式で
数式 =COUNTIF(B:B,B1)>1
 書式-パターン-赤
VBAよりシンプルだ。でもVBAで処理する方が素敵だと、いつも自分に言い聞かす

テーマ:プログラミング - ジャンル:コンピュータ

Split
例えば、a="12:34:56"を
配列b(0)=12,b(1)=34,b(2)=56に入力する場合
b(0)=left(a,2)
b(1)=mid(a,4,2)
b(2)=right(a,2)
としてた。
最近、
Dim b As Variant
b = Split(a, ":")

でできることを知った。
セル[A1],[B1],[C1]へ12,34,56
を入力するには
Range("A1:C1") = Split(a, ":")で一発!

テーマ:プログラミング - ジャンル:コンピュータ

ソート
昔、膨大なデータのソートをVBAで作ってほしいと依頼があった。
ソートのアルゴリズムを考えること20分、EXCELの標準機能で並び替えが
あったことを思い出す。
A列へデータをぶち込み、
Columns("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending,Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,SortMethod:=xlPinYin
たった、これだけで、高速ソートプログラムの出来上がり。

テーマ:プログラミング - ジャンル:コンピュータ

copyright © 2005 エクセラのEXCEL all rights reserved.
Powered by FC2ブログ.