トップページ | 2010年1月 »

2009年12月

2009年12月31日 (木)

R1C1形式をA1形式に変換する

たびたび、R1C1形式をA1形式に変換することがあったので
R1C1形式をA1形式に変換するFuctionプロシージャを作ってみた。
作ったという程のものでもないんですが…

詳しくは、
VBAのヘルプで「ConvertFormula」で検索してみてください。 

まずは、下記のコードを標準モジュールにコピペしてください。

R1C1形式をA1形式に変換するFuctionプロシージャ

Function toA1(StrR1C1 As String)
'R1C1形式をA1形式に変換
    toA1 = Application.ConvertFormula( _
        Formula:=StrR1C1, _
        fromReferenceStyle:=xlR1C1, _
        toreferencestyle:=xlA1, _
        toabsolute:=xlRelative)
End Function

使い方ですが、toA1(StrR1C1)の「StrR1C1」の部分に
R1C1形式のString型を入れてください。

例1:とりあえずMsgBoxで使ってみる。

toA1使用例

Sub Macro091231a()
'toA1使用例
    MsgBox toA1("R1C1:R3C4")
End Sub

結果は、

Pic20091231b_2

です。

例2:Rangeプロパティで使ってみる。

Excel VBAでRangeプロパティを使うとき、R1C1形式は使えないのでR1C1形式をA1形式に変換する必要があります。

実は、このRangeプロパティのために
R1C1形式をA1形式に変換するFuctionプロシージャを作りました。

For文を入れ子して、変数 i, j など使って範囲を指定する場合
R1C1形式の方がわかりやすいので
R1C1形式を使おうとしたところ、
RangeはA1形式でないといけないようで
Range("R1C1:R3C4")などとするとエラーになりました。

そこで、私はRange(Cells(1,1), Cells(3,4)) の様にし始めました。
しかし、複数のシートやワークブックを使うようになると

絶対参照のほうが確実だなー

と思い、こんな感じに

WorkBooks("Book1.xls").Sheets("Sheet1").Range(Cells(1,1), Cells(3,4))

よく見るとCellsのところが相対参照になっちゃってるし…
そこまで絶対参照にすると分かりにくいし~

という流れで
R1C1形式をA1形式に変換するFuctionプロシージャにたどり着きました。

toA1使用例

Sub Macro091231b()
'toA1使用例
    Dim i As Integer
    Dim MyRange As String
   
    For i = 1 To 10
        MyRange = _
            toA1("R" & i & "C1:R" & i & "C" & i)
        Range(MyRange) = i
    Next i
   
End Sub

この例は
1行目に1を1列目まで
2行目に2を2列目まで

10行目に10を10列目のセルまで入れます。

Pic20091231a

実行するとこの様になります。

ascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 

| | コメント (0) | トラックバック (0)

2009年12月30日 (水)

田沼晴彦:『Excelで遊ぶ手作り数学シュミレーション』

私がExcel VBAをやるようになった
きっかけの本です。

2次関数・三角関数・円・楕円といった
高校の数学程度の内容を

ワークシート
VBA
Excelのグラフ機能

を使いながら
「動くグラフ」を作れるようになります。

VBAの予備知識は不要です。
全くVBAを知らない人を読者と想定している内容で
基本的なことから
丁寧に説明されています。

なので
この1冊があれば
VBA初心者でも「動くグラフ」ができます。

グラフを動かす仕組み自体は、
この本の内容をやってみれば
単純なことだとわかります。

ですが、
3D等高線グラフを使った
擬似波紋の「動くグラフ」は

「お~、エクセルが3Dで動いてる!」

といった、
ちょっとした感動ものでした。

とりあえずVBAを使ってみたいけど、
VBAで何をしたらいいかわからない人

高校数学の内容を
コンピュータグラフィックスを使って表してみたい人

におすすめの本です。

以下、
私が本書を参考に作ったグラフなどの
一部を載せます。

Pic20091230a
For文、If文を使って
倍数や公倍数などを求める。

Pic20091230b
同じく
For文、If文を使って
素数を求める。

Pic20091230c
2次関数のグラフの一例
ボタンを使って
動くグラフをスタートさせます。
下の2つも画像にボタンはありませんが
ボタンを使って動かします。

Pic20091230d
三角関数関連のグラフの一例

Pic20091230e
擬似波紋の3Dの動くグラフ
うねります。

目次は講談社HPへ

| | コメント (0) | トラックバック (0)

くだらなすぎる間違い「s」

次のコードのなかにはエラーがあります。

Sub Macro091230a()
'くだらなすぎる間違いの例

    ActiveSheet.Cell(1, 1) = "くだらない"
    ActiveSheet.Cell(2, 1) = "間違い"
   
End Sub

わかりましたか?

そう、「s」です。
Cells(1,1)でないといけないのですが、
私はすぐには気が付かず、考えました。

長いコードの中にあり、
くだらなすぎる間違いなので
エラーが発生している行をエクセルちゃんに示されても気づけませんでした。

わかればアホらしいミスです。

おそらく複数形の「s」なのでしょうが、
日本人的?には
The dog でも Dogs でも犬は犬であって
いちいち個別の犬を表しているとか
犬という種類を表しているとか
いちいち意識的に区別して生きてません。

WorkbooksもSheetsも「s」なくてもいいんじゃないの~とか
ActiveSheetにはやっぱり「s」ないのね~とか
思います。

どーでもいい独り言です。
すいません。

| | コメント (0) | トラックバック (0)

トップページ | 2010年1月 »