パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

日付を操作する(Excel)

2011-06-30 09:01:55 | エクセル
みなさんおはようございます。

今日はmihoりんの「日付の数式ワンポイント講座 ~翌月の指定日~ 」をやります(*^_^*)

お仕事で、Excelから請求書を作っているかたはたくさんいると思います。

請求書には「支払い期限」というものを明記しますよね。

一般的には翌月内に支払いを求めます。

では、翌月20日を支払い期限としたい場合の日付を請求日から算出してみましょう。

これが今日のお勉強です。

Excelでは数式を上手に使うことによって、これを取得することが出来るんですよ♪

※通常は20日が土、日曜日の場合は翌週の月曜日の日付にしますが、
これは次回に取り上げます。今日は単純に翌月20日を算出しますよ(*^_^*)

このようにしますよ↓



セルC6を選択し数式を入力します。

=Date(Year(C4),Month(C4)+1,20)のように入力すると取得できます。



なにやら関数がたくさん絡んでいますね

そうです。日付を操作するには、関数が必須なのです。

ただし、見てのとおり複雑化してしまうことが多いので、いずれは自分で関数を

作っちゃいましょうね(*^_^*)

さて、数式の説明をしましょう。

私たちが取得したいのは、請求日から見て翌月の20日です。

自分の頭で計算する場合、請求日の月に1を足しますね。年は変わらないのでそのまま。

そして日は20にします。これを組み合わせて、2011/7/20だと頭の中では考えますね。

ワークシートを使って、それぞれを出してみると・・



そうして出た3つの数値を組み合わせて日付を作ります。

数値を組み合わせて日付を作成してくれる関数がDateです。





ということになりまぁす♪

セルC6に設定した数式をもう一度確認してみてくださいね。

同じようにやっていますから(*^_^*)


では、今日も暑さに負けず、楽しい一日を過ごしましょうね。

mihoりん
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

DVDビデオを携帯に取り込む(スマートフォン・iPhone4編)

2011-06-28 09:21:05 | スマートフォン・ケータイ
またまた、携帯ネタですみません。最近ネタがなくて・・・(^_^;)

私事ですが、先週の金曜日に携帯をスマートフォンにしちゃいました。
買ったのは「AQUOS PHONE IS11SH」というやつです。6/24に発売されたばかりのテンキーの付いたモデルです。



4月に機種変をしたばかりなのにね。笑ってやってください。(^_^;)


そこで、今回は「DVDビデオを携帯に取り込む(スマートフォン・iPhone4編)」です。

変換の方法は「DVDビデオを携帯に取り込む(その1)」と「DVDビデオを携帯に取り込む(その2)」で
説明していますので、今回は「Any Video Converter Gold」の設定だけ説明します。


まずは、「スマートフォン」から。

「出力形式」は、普通の携帯と同じ「携帯電話動画」を選択します。



プルダウンメニューから、「Google Android MPEG-4 動画(*.mp4)」を選択します。



次に「動画オプション」の設定です。

「動画コーディック」は「x264」
「動画サイズ」は「640×480」
「動画ビットレート(kb/s)」は「1500」
「フレームレート」は「30」



次に「オーディオオプション」です。

「オーディオコーディック」は「aac」(グレーアウトされていて、これ以外は選択できません)
「オーディオビットレート(kb/s)は「128」
「オーディオサンプルレート」は「44100」 
「オーディオチャンネル」は「2」




「iPhone4」です。

「出力形式」は「アップル製品」を選択します。



プルダウンメニューから、「Apple iPhone 4 MPEG-4 Movie(*.mp4)」を選択します。



「動画オプション」と「オーディオオプション」はスマートフォンと同じでいいです。

この設定で、前回使用した「アバター」を変換すると約1.9GBほどになります。

前回の携帯用に変換したのに比べると、かなり画質はいいですよ。

「Any Video Converter Gold」は有料ですが、無料の「Any Video Converter Free」というのもあります。
DVDビデオから直接変換はできませんが、他の動画の変換はできます。
使い方は「Any Video Converter Gold」とほぼ同じです。


ところで、スマートフォンも、iPhone4も、パソコンと言ってもいいですね。

私の使っている「AQUOS PHONE IS11SH」だと、
OSが、Linux(リナックス)ベースのAndroid 2.3(アンドロイド)、CPUは1.4GHz、メモリ(RAM)は、512MB
「iPhone4」は、
OSが、Mac OS X(マック オーエス テン)ベースのiOS 4.2(アイ・オーエス)、CPUは1GHz、メモリ(RAM)は、512MB
と、いうスペックです。

ちなみに、普通の携帯電話にもCPUが搭載されている事は知ってました?


※2012年10月1日より著作権法が改正施行されました。
詳しくは下記サイトをご覧ください。


2012年著作権法改正でどう変わる? 違法ダウンロード刑罰化Q&A編

2012年著作権法改正でどう変わる? DVDリッピング規制Q&A編


(ケン)
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今週のおすすめ記事

2011-06-25 09:00:02 | その他

みなさ~ん 蒸し暑いですね~(*_*;

あっおはようございます。

ここ2、3日は雨とともに急に暑くなって体調コントロールも大変!

ねぇだい先生

「雨がアルコールだったらなぁ・・」

・・・そうでなくて(涙)

ねぇケンさん

あら今日はケンさんは代休だったわ

有意義な週末を過ごしてますかね。

さっ今日も私たちは張りきってお仕事しましょう!

そんなわけで今週のおすすめ記事をご紹介しますよ。

君は、この矢印の正体を見破れるか!!(フォントの不思議)

大きさの違う図形を連続挿入する(Word2007)

液晶モニタ購入時の注意事項

みなさんもよい週末をお過ごしくださいね。

次回の記事は来週の火曜日にアップ予定です。お楽しみに~♪
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

セルの値を「名前」として使用する方法--INDIRECT関数(Excel2000以降)

2011-06-23 09:01:23 | エクセル

エクセルの操作に慣れてくると、あれ?こんなとき、こんなことができるといいのにな、なんて思うことがあります。

調べてみると、実際にできることもあり、エクセルって、賢いんだなと感心することがあります。

今日は、そんなネタをご紹介します。
Excel2007で説明しますが、それ以前のバージョンでもちゃんとできますよ。


さて、「売上データ」というシートに、次のような表があります。
ある会社の売上情報です。




それでは、この売上データを集計しましょう。
下の表が、集計用です。別シートに用意されているとしましょう。
注意してほしいのは、なぜか?C列~E列の見出しが、元の売上情報の列の並びと違うところです。
(普通、それはないだろうって? まあまあ、そこは、今回のネタの紹介のために大目に見てくださいな。)





皆さんもご存じの通り、商品別の合計値を出すためには、SUMIF関数を用います。

以下のように、3つの引数をきちんと設定すれば、ちゃんと答えが出ます。

ただし、この数式は、縦方向にコピーできますが、横方向にはコピーができません。
列の並びが、異なるからです。
したがって、各列の先頭のセルに手動で関数を設定する必要があります。3回は、関数を設定しなければなりません。






まあ、3回ばかり大したことはありませんが、これがもっとたくさんだったらどうでしょう?

何列にもわたって似たような関数を設定するのは、大変です。
なんとか、楽ができないものでしょうか?



数式をコピーしてすむようにするには、規則性が必要です。
列の並びが異なっていても、ある規則性がどこかにあれば、何とかなります。


たとえば、C列~E列の1行目にある列見出しを活用することはできないでしょうか?
今回のSUMIF関数では、第3引数がまさにその列名で参照できそうです。

これは、名案です。

列見出しを活用するには、セル範囲に名前を付け、その名前と列見出しを同じにしておけばいいのです。


それでは、さっそく、C列に「売上数量」という名前を付けてみましょう。

C列を選択し、「数式」タブの「選択範囲から作成」をクリックします。






「選択範囲から名前を作成」ダイアログボックスが表示されます。
「上端行」にチェックを入れると、1行目の列見出しが名前に設定されます。
「OK」を押します。






同様にD列、E列にも列見出しの名前を付けてください。

一応確認しておきます。

「数式」タブの「名前の管理」をクリックします。
以下のように、3つの名前があれば大丈夫です。






さあ、改めてC2にSUMIF関数を設定しましょう。

注目は、第3引数です。セル範囲の名前を使用するので、C1と、セル番地を使います。

これで良さそうですが、実は、これでは、正しく動作しないのです。

ううん、残念!







実は、C1の値は、「売上数量」という単なる文字列にすぎません。
第3引数に指定すべきは、「売上数量」という、セル範囲につけられた名前なのです。
だから、SUMIF関数に、「売上数量」は、文字列ではなくて、セル範囲なんだよ、と教えてあげなくてはなりません。

なんと、そんな親切な関数があるのです。
それが、INDIRECT関数です。
以下のように、修正してください。
INDIRECT(C$1) とするのです。(数式のコピーのために、複合参照を設定しました)






今度は、ちゃんと答えが出ました。
この数式は、縦方向でも、横方向でも、うまくコピーができます。(複合参照をお忘れなく!)







このように、名前とINDIRECT関数を組み合わせて使用すると、ますます作業を効率的に遂行できるときがあります。



だい
コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

意外と難しい 段落記号を含まずに文字を選択する(Word)

2011-06-21 09:01:30 | ワード
みなさんおはようございます。

今日はブログ読者さんからの質問をとりあげますよ(*^_^*)

『Word2007で、1行に4文字打ちました。
そしてEnterしました。
この4文字に均等割り付けをしようと思い
文字を選択しようとすると、改行記号まで選択されて、どうしても出来ません。
選択のコツを教えて下さい。』



そういえば私もあるコツをつかむまでは苦労してましたっけ。

さて、あるコツとは・・・



そう

「思いっきり通り過ぎて→少し戻る」

なのです。

さぁやってみてくださいね

mihoりん
コメント (14)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今週のおすすめ記事

2011-06-18 09:00:22 | その他
おはようございます。(*^。^*)

4月にIE9がリリースされましたね。
パソカレスタッフ ケンさんはもうさっそく使っているようです
※WindowsVista 7対応となります。

「ブラウジングは速くて快適だよ」とのコメントです。

さぁそんなわけで
今週はIE特集ですよ(*^。^*)


「Internet Explorer」の起動時間

IEでリンクを開くとウインドウサイズが小さくなってしまう。

記録された特定のパスワードを削除する方法(Internet Explorer)

どうぞご覧くださいな♪


ちなみに、パソコンカレッジってこんな所にありますよ。近くに来たら寄ってくださいね(*^。^*)
(ごはん処魚膳さんの隣です)




コメント (4)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Vlookup関数のコピーを簡単に行う方法(Excel2002以降)

2011-06-16 09:02:03 | エクセル
今日は、Excelを取り上げます。

Vlookup関数は、実務では大変活躍する便利な関数ですね。

今回は、例として、請求書の明細部分をとりあげます。

B列に商品IDを入力すると、C列とD列に自動的に商品名と単価が表示されるようにします。
お分かりの通り、これは、Lookup系の関数を使います。




商品のデータは、別のシートに用意されています。





この商品のデータのセル範囲には、名前を付けておいたほうが便利です。
名前を付けると、セル範囲は、自動的に絶対参照になるからです。
今回は、「商品リスト」と名付けました。




そして、もうひとつ事前に準備をしておきます。
C列とD列の見出しの上に数字を入力しておきます。
この数字は、「商品リスト」の左列から何列目かを示しています。
つまり、商品名は、左から2列目、単価は、左から4列目ということです。





それでは、C4に関数を設定しましょう。
第2引数は、名前を使います。
F3キーを押すと、「名前の貼り付け」ダイアログボックスが表示されますので、選択すれば入力できます。

第3引数は、数字を手入力するのではなく、先ほど用意した数字のセル番地を用います。
ここがポイントですよ。こうすることで、数式のコピー時に威力を発揮します。
なお、あとで数式をコピーすることを考慮して、複合参照を設定しておきましょう。





C4に入力した数式をD4にコピーします。
自動的に、単価が表示されます。
第3引数は、このようにセル番地を使用すると、効果的です。

C2:D2の数字は、フォントの色を白にして見えないようにするか、あるいは、行の非表示を使ってユーザーから隠してください。






それでは、今日も楽しい一日を。


だい
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

図形の書式設定 「オーバーラップさせる」Word

2011-06-14 09:01:11 | ワード
みなさんおはようございます。

昨日レッスンに来てくれたTさんからこんな質問をいただきました。

「せんせーい ブログ読んでますよぉ♪」

わぁありがとうございます。

「それで質問なんですが・・」

はいどうぞ(*^_^*)

表のそばに画像を配置すると文字がずれる(Word)」という記事にレイアウトの詳細設定ダイアログボックスの
画像があるじゃないですかぁ。そこを見ていたら『オーバーラップさせる』という項目がありまして・・
これは何かなぁと・・・ためしてみたんですがよくわからないんです。記事には関係ないんですが(笑)
この機能はなんですか?」



うふふ。Tさんおもしろいところに目を付けましたね。

オーバーラップとは「重なっている状態」と言う意味です。何が重なるかって、この場合は図形同士のことを

言っているんです。初期設定ではチェックが入っていますから、図形同士は重ねることができるという

設定です。わかりにくいですが(笑)

やってみましょうね。

文書の中に好きな図形を2つ重ねて配置してください。

図形を2つ使うと意味がわかると思います。



「はぁい」

そのうちの一つの画像を選択して、

右クリック→オートシェイプの書式設定→レイアウトタブ→詳細設定→





「オーバーラップさせる」のチェックをはずす→



OK→OK

さぁ選択した図形をドラッグしてもう一つの図形に重なるように動かしてみてください。



「あっ重ならない~。なるほどそういう意味だったんだぁ」

「あースッキリ」

よかった(*^_^*)

mihoりん
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今週のおすすめ記事

2011-06-11 09:00:45 | その他
おはようございます。

沖縄地方で梅雨明けしましたね。
平年に比べ14日早く、昨年より10日早く、統計を始めた1951年以降では最も早い梅雨明けだそうです。

上田も、早く梅雨明けしないかなぁ~。

さて、

今回も、当ブログでアクセスが多い記事をピックアップしました。


Viataで動画のサムネイル(縮小表示)が表示されない場合の対処方法

ページによってヘッダーフッターの内容を分けましょう(Word2007)

IF関数であいまい検索しましょう(Excel)


今回も ぜひご覧くださいね。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ExcelVBAで電卓を作ろう-その3 「コードを書こう」

2011-06-09 09:01:10 | ExcelVBA
今日は、「ExcelVBAで電卓を作ろう」の3回目です。

バックナンバーは、以下の通りです。

第1回「複数のコントロールのイベントを一つのプロシージャにまとめる(ExcelVBA)
第2回「ExcelVBAで電卓を作ろう-その2「アルゴリズムを考える」

さて、前回のアルゴリズムを踏まえて、今回は、実際にコードを書いてみましょう。

まず、電卓の確認です。



問題をシンプルにするために、0~9の数字と、加減乗除のボタン、=ボタン、それにAC(オールクリア)ボタンのみの
構成にします。


それでは、コーディングしましょう。

第1回の際に、数字のボタンを押すと、数字が表示されるコードを書きましたね。

そうです。Classモジュールに記述しましたね。まず、これを少し、修正しましょう。

実は、このままでは、常に1桁の数字しか表示できないのです。

2ケタ以上表示できるように、以下の様に修正します。


Option Explicit

'イベントを持つコマンドボタン型の変数を宣言
Private WithEvents Btn As MSForms.CommandButton
'ボタンの数字を格納する変数を宣言
Private Index As Integer

Public Sub NewClass(ByVal c As MSForms.CommandButton, _
          ByVal i As Integer)
  'いわゆるコンストラクタ処理

  '引数のコマンドボタンを変数に格納
  Set Btn = c
  'コマンドボタンの数字を変数に格納
  Index = i
End Sub

Private Sub Btn_Click()
  '数字のボタン(0~9)を押した時の処理

  'frmCalcフォームのTextBox1に、
  '変数Indexの中身を表示する

  If IsNew Then
    '数字の新規入力時
    frmCalc.TextBox1.Text = Index
  Else
    '数字の入力途中
    frmCalc.TextBox1.Text = _
        CLng(frmCalc.TextBox1.Text & Index)
  End If

  '数字の入力途中にする
  IsNew = False
End Sub


画像も載せておきます。




変更箇所は、Private Sub Btn_Click() のコードだけです。

IsNew という変数が登場しました。
この変数は、True と False の2種類の値をとることができるブーリアン(Boolean)型の変数です。
この変数にTrueが格納されている場合は、新規入力とします。
つまり、今までの数字は、無視して、最初に入力される数字ということです。
加減乗除のボタンと、=ボタン、ACボタンが押された直後に、Trueが格納されます。

数字の入力直後で、IsNew に Falseを格納します。
これで、2桁以上の数字の表示が可能となります。


なお、このIsNew という変数は、ユーザーフォームからもこのClassモジュールからも使用します。
従って、どのモジュールからも使用できるように、標準モジュールに宣言を記述します。

「挿入」→「標準モジュール」とクリックします。

以下のように記述します。


Option Explicit

Public IsNew As Boolean

Public Sub ShowCalc()
  frmCalc.Show
End Sub

画像はこちら。




変数の宣言の他に、フォームを起動するプロシージャ「ShowCalc」も書いておきました。



それでは、いよいよ、フォームにコードを書いていきます。

ユーザーフォームのコードウィンドウを表示します。

冒頭に変数の宣言と列挙型の宣言、そして、フォームの初期化イベントのコードを書きます。


Option Explicit

Private NumBtn(0 To 9) As New Class1
Private stack(0 To 1) As Currency
Private Action As Integer

Private Enum Act
  Equal
  Plus
  Minus
  Multi
  Devi
End Enum

Private Sub UserForm_Initialize()

  'インスタンスの生成
  Dim i As Integer
  For i = 0 To 9
    NumBtn(i).NewClass Controls("b" & i), i
  Next

  '表示設定
  TextBox1.Text = 0

  '初期化処理
  InitCalc

End Sub



UserForm_Initialize プロシージャの中の InitCalc は、サブプロシージャです。

別途、以下の様に書いておきます。


Private Sub InitCalc()
  '初期化処理

  'スタックと記号の初期化
  stack(0) = 0
  stack(1) = 0
  Action = Act.Plus

  '表示クリアフラグの初期化
  IsNew = True

End Sub

つまり、計算用の配列の値を0にして、記号を格納するAction変数にプラスを意味する数字を代入します。
(ここで、単なる数字の代わりに列挙型を使用しています)

さらに、IsNew 変数にTrueを代入して、新規入力を促しています。


以上、参考までに画像です。





さて、それでは、ここで、記号ボタンを押したときの処理を書いてみましょう。

この処理は、加減乗除の4つのボタンと、=ボタンを押したときに、いつでも呼び出されるプロシージャとして記述します。
何度も同じコードを書く必要がなくなりますね。

以下のように書きます。

Private Sub Calc(ByVal CurrentAction As Integer)
  '計算処理(記号ボタンが押されると呼び出される)

  '電卓窓の数字を変数に格納
  Dim n As Long
  n = CLng(TextBox1.Text)
  stack(1) = n

  '計算結果を格納する変数
  Dim Ans As Double

  Select Case Action
    Case Act.Equal
      '=
      Action = Act.Equal
    Case Act.Plus
      '+
      Ans = stack(0) + stack(1)
      stack(0) = Ans
      stack(1) = 0
      TextBox1.Text = Ans
    Case Act.Minus
      '-
      Ans = stack(0) - stack(1)
      stack(0) = Ans
      stack(1) = 0
      TextBox1.Text = Ans
    Case Act.Multi
      '*
      Ans = stack(0) * stack(1)
      stack(0) = Ans
      stack(1) = 0
      TextBox1.Text = Ans
    Case Act.Devi
      '/
      If stack(1) = 0 Then
        Ans = 0
      Else
        Ans = stack(0) / stack(1)
      End If
      stack(0) = Ans
      stack(1) = 0
      TextBox1.Text = Ans
  End Select

  '引数で受け取った記号を格納
  Action = CurrentAction
  '新規入力にする
  IsNew = True

End Sub

画像はこちら。





前回の記事をご覧いただければ、今回のコードの意味もお分かりいただけるでしょう。
このプロシージャは、引数を1つ持っています。
どの記号が押されたのかを引数に指定するのです。
この記号を、Action変数に格納するためです。



さあ、あとは、記号のボタンのコードだけです。

記号のボタンのイベントプロシージャを以下のように記述してみましょう。



Private Sub Plus_Click()
  '足し算

  'サブプロシージャの呼び出し
  Calc Act.Plus

End Sub


Private Sub Minus_Click()
  '引き算

  'サブプロシージャの呼び出し
  Calc Act.Minus

End Sub


Private Sub Multi_Click()
  '掛け算

  'サブプロシージャの呼び出し
  Calc Act.Multi

End Sub

Private Sub Dev_Click()
  '割り算

  'サブプロシージャの呼び出し
  Calc Act.Devi

End Sub

Private Sub btnEnter_Click()
  '=の処理

  'サブプロシージャの呼び出し
  Calc Act.Equal

End Sub



画像も載せておきましょう。






いずれも、サブプロシージャを呼んでいるだけです。
その際、引数にその記号を指定していることに注意してください。



最後に、ACボタンのコードを書いておきましょう。


Private Sub btnAC_Click()
  'ACボタンの処理

  TextBox1.Text = 0

  '初期化処理
  InitCalc

End Sub


まさに、オールクリアですね。



それでは、実行してみてください。
いかがですか? 実際の電卓と同様の動作をするでしょう。

色々と試してみてください。
なかには、不思議な処理をする時があるかもしれません。
その理由を考えてみてください。
修正してみるのも勉強になります。


エクセルのバージョンは、2002(XP)以上でお願いします。


だい
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

簡単 書式の解除(Word)

2011-06-07 09:01:31 | ワード
みなさんおはようございます。

つい最近パソコンのお勉強をはじめたWさん。今日はワードのレッスンです。

パソカレのオリジナルテキストを使って今日も文書を作成します。

「ねぇせんせ~い タイトルのフォントやサイズを変更して改行したんですよ。そうしたら本文もタイトルと

同じ書式になっちゃいました。これっていちいち直しながら作っていくのですか?」



そうですよ。Wさん(*^_^*)Wordは、書式設定後に改行すると直前の書式を引き継いでしまうので

これをやっちゃったら直しながら作っていくんです。面倒でしょ(*^_^*)

だからね、一番いい方法は、文章すべてを入力したあとに書式設定するんです。

「はっ 前回のレッスンでたしか教わりましたね・・(汗っ)」

いいのいいの。何回も聞いてさわって覚えていくんですから(*^_^*)

「じゃあ入力しなおしますよ」

それはもったいないな。書式を解除して初期設定にもどせばいいですよ。

Wさん、簡単に書式を解除する方法をおしえましょうね。

フォント書式と段落書式の設定を別々に解除できるんです。

しかもショートカットキーを使うからちょっとカッコいいし♪

「わぁ教えて教えて」

いい?本文のところを選択してね。

Ctrlキー+Spaceキーを押してみて。




「文字書式が解除されました」

じゃあ今度は

Ctrlキー+Qキーを押してみて。



「中央揃えが解除されました。あっこれは段落書式ですね。全部初期設定に戻ったようです。

なんか気持ちいいわ♪」

そうでしょう(*^_^*)

「これを知っていると安心します。だってこれからも元に戻したい場面がたくさんありそうだから(笑)」

そうそう(*^_^*)どんどん使って~

・・・がんばります

そんなわけで今日も楽しいレッスンはつづくのでした。

mihoりん
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

今週のおすすめ記事

2011-06-04 09:00:04 | その他
おはようございます。

今回は、当ブログでアクセスが多い記事のトップ3を紹介しますね。

ほとんどが、GoogleやYahooの検索などからのアクセスですが、下記の3つの記事だけで
毎日140~150のアクセスがあります。

つい最近、だいさんとmihoりんが携帯を「iPhone4」にして、ルンルンです。
ちょっと羨ましい・・・・


「iPhone」が、パソコンで認識しない

ヘロンの公式で三角形の面積を求めよう

ユーザーアカウントの画像をオリジナル画像に


今回も ぜひご覧くださいね。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ExcelVBAで電卓を作ろう-その2「アルゴリズムを考える」

2011-06-02 09:05:00 | ExcelVBA
今日は、「ExcelVBAで電卓を作ろう」の2回目です。

なお、1回目は、複数のコントロールのイベントを一つのプロシージャにまとめる(ExcelVBA)です。
(タイトルが全然違ってます。すみません)


さて、今回は、どういう方法で電卓の機能をプログラムするかを一緒に考えてみましょう。


これは、非常に重要です。
例えば、「1+1= 」と電卓のボタンを押すと、答の2が画面に表示されなければなりません。
そのためには、どうすればいいのかを考えましょう。

まず、押したボタンの情報をきちんと記憶しておくことが重要です。
どのボタンを押しても、そのボタンの情報をきちんと記憶させておくためには、変数を活用します。

具体的には、「1」「+」「1」「=」の4つのボタンを押していますから、この4つの情報を記憶させる変数が必要です。

それでは、変数は、4つ必要でしょうか?
もし、「1+2-3=」 という計算をしたい場合は、全部で6個の変数が必要ということでしょうか?

すると、長い計算をする場合は、その分変数が必要となります。

なんだか、大変な話になってきましたね。


実は、単純な四則演算ならば、用意する変数は3つあれば何とかなります。

そのうちの2つは、数字を格納する変数です。
もうひとつは、加減乗除のどの演算をおこなうかの情報を格納する変数です。

なぜかというと、長い計算でも、常に、「数字」「記号」「数字」 の構造が続くだけだからです。

つまり、「1 + 1」 は、「数字が1」「記号が+」「数字が1」という構造です。

それでは、「1 + 2 - 3 =」は、どうでしょうか?

まず、「1 + 2」は、「数字が1」「記号が+」「数字が2」ということですから、上記の構造になっています。
その後ですが、「1 + 2」は、3 のことですから、「3 - 3」ということになります。
すると、やはり上記の構造となりますね。

長い計算式は、このように最初から順に計算していくことによって、
常に、「数字」「記号」「数字」 の構造になるのです。


この構造に対応する変数は、3つあればいいことになります。
(補足しておきますが「=」の記号も記号用の変数に格納することになります。)


数字を格納する変数は、好きな名前で結構ですが、今回は、配列を使ってみます。
stack(0) と stack(1) という名前にしてみました。

スタックというのは、アルゴリズムのテキストを見れば必ず出てくるデータ構造の名前です。
「先入れ後出し」 が特徴です。詳しいことは、各自調べてみてください。

計算の処理は、実は、スタック構造なのです。

なお、この配列変数は、まず最初にstack(0) に値を代入し、次にstack(1)に値を代入するものとします。
この順番は、とても重要です。

そして、もうひとつ重要なことがあります。この配列変数から値を取り出す際には、
必ず後に値を入れたstack(1)のほうから取り出すということです。

イメージとしては、机の上に積み重ねられた本です。

本の上にまた本を積み重ねていきます。これは、データをどんどん入れていく過程です。
本を手に取ろうとすると、どうしても最後に積み重ねた本から取らざるを得ません。
これがデータを取り出す作業です。
まさに、「先入れ後出し」 ですよね。


また、記号を格納する変数は、Action という名前にしてみました。


それでは、「1 + 2 - 3 =」 を例にとって、データの処理の流れを追っていきましょう。
なお、処理の流れを理解しやすくするために、数字は、1桁に限るという制約をもうけます。


まず、仕込みをします。
stack(0) と stack(1)には、0を入れておきます。
そして、Action には、「+」を格納しておきます。
理由は、こうしておくと、論理がシンプルになるからです。この仕込みは重要です。






電卓の「1」ボタンを押しました。
その際、プログラムサイドでは、stack(1)に1を格納します。




次に「+」ボタンを押します。
プログラムでは、この時点で計算(演算処理)を行います。
つまり、「数字」「記号」「数字」 の構造に以下のように変数の値を適用します。
「stack(0)」「Action」「stack(1)」 

つまり、変数の値で記述すると、
0 + 1
ということになります。
そして、ここが重要ですが、その計算結果である 1 を stack(0)に格納し、stack(1)を0にします。

何をしているかといいますと、スタックの構造を考えると分かりやすいです。

つまり、計算するために、stackという配列変数からデータを取り出します。
その際、最初に、あとから値を代入したstack(1) の中から値を取り出し、次に先に入れておいた
stack(0)の値を取り出します。

これが、スタックの特徴の 「先入れ後出し」 です。
一応確認ですが、この時点で、stack配列には、値が何も入っていません。

この2つの値を、Actionに格納されている記号で演算処理し、その計算結果を、再度stackに入れます。
このとき、配列変数は、空っぽですから、stack(0) に値を入れることになります。
(stack(1)には、まだ値が入っていませんが、それを表現するために0が入っていると考えてください)

そして、今回の記号を Action の中に格納します。





次に「2」ボタンを押したときの処理です。

2 を配列変数に格納します。既にstack(0)には、値が代入されているので、必然的にstack(1)に格納します。





ここまでで、「1+2」までボタンを押しましたね。もう一息です。

次に「-」ボタンを押したときの処理です。

記号のボタンなので、計算をします。

先程説明した通りの処理を行います。

つまり、stack(1)の値を最初に取り出し、次にstack(0)の値を取り出します。
そして、Actionの中に格納されている「+」を使って演算します。
その答えである 3 を、stack変数に入れます。そうです。stack(0)に 3 が入りますね。
stack(1)は、空っぽなので、0 が入っています。

そして、Action に今回の記号である「-」を格納しておきます。





次に「3」ボタンを押したときの処理です。

stack(1)に 3 を入れます。





いよいよ最後のボタンです。

「=」ボタンを押したときの処理です。

これも、記号ボタンの処理と同じですよ。

つまり、stack(1)の値を最初に取り出し、次にstack(0)の値を取り出します。
そして、Actionの中に格納されている「-」を使って演算します。
stack(0)の値 マイナス stack(1)の値 ですから、答は、0 となります。

その答えである 0 を、stack変数に入れます。そうです。stack(0)に 3 が入りますね。
stack(1)は、空っぽなので、0 が入っています。

そして、Action には、「=」を代入しておきます。







「1 + 2 - 3 =」という、たったこれだけの計算なのに、その処理を追っていくと、こんなにも長い説明に
なってしまいました。

でも、これで考え方は整理できましたね。

次回は、コードを記述しましょう。それでは、また。


だい
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

【おすすめ】

パソコン買ったらまず入れる10のアプリ