step4の最近のブログ記事

放送大学で、ソフトウェアのしくみを順調に(汗)学習中です。

はてさて、第1回の授業を受講し、演習問題に取り組んだモノの、エクセル女子(笑)には意味不明な単語が続出。「符号あり正数」これは、「+」「-」の符号がつくと言うことで理解。DBで桁数(文字数)を設定する場合、10桁なら、符号で1桁使うので、実際には9桁しか入力できなくなる、そんな感じ。「2進数」これは、数字を0と1で表示するということで、時計の12進数や60進数が理解できていればOK。でも、0→1→10→11→100 と、即桁が上がる恐ろしい表現方法。なるほど。最後に「2の補数」。これ、わかりませんね(笑)。Facebookで説明を受けても、はぁ?という感じ(失笑)。エクセル女子の日常に全く存在しない文化です。

結論として、「2の補数」を理解することよりも、符号あり正数の負の数を、2進数化するときに、2の補数で表現できるようになればOKと理解。プログラムはなすべきコトができればそれで良いのです!(初心者の内は)!!

  1. 負数の絶対値を取る
  2. 2進数にする(3bit)
  3. bit反転する(0→1、1→0、なので、100→011)
  4. 001を足す

エクセル2010には2進数に変換する関数 DEC2BIN() がありますが、2進数化した数値を2進数として計算させることはできないようです。111+001なら1000が解ですが、エクセルは112とします。普通ですね(笑)。ということで、10進数で計算したモノを2進数化するのがよろしいようです。

個人的に困ったのは、不慣れすぎて、この計算過程が正しいかどうか確認する術が無かったこと。解が回答と同じでも大丈夫なのかと不安になりました。ということで、エクセルで、計算過程を表現してみようと思い至ったわけです。

また、演習問題2.2、2.3の表をエクセルで作成し、×がつく(フラグが立つ)場所に×を付けてみました。こんなことに4時間も消費したことは棚上げしておきます。きっと、このファイルを作った知識はPGする時に役立つと思うから。

作成したエクセルファイルはこちらにあります→ http://1drv.ms/1huBaTM

なお、bit反転するエクセル関数がなかったため、エクセルで数字を反転させるマクロ、関数はありますか? 例 11→00 00→11 を参考にしました。質問者と回答者に感謝感謝♪ また、不幸にも巻き込まれてしまったソフト屋の背の君様にも感謝感謝。「旧2種の勉強?」と言われてしまった(笑)。

では、エクセル女子、エンドユーザー女子の皆様、お互い、コツコツがんばりましょう!!

オススメサイト
Facebook 放送大学講義「ソフトウェアのしくみ」
Facebook 放送大学講義「コンピュータのしくみ」

 

ご無沙汰しております(苦笑)。

さて、今日はエクセルで行間設定をするのが面倒だなぁ~と思ったので、マクロでやってみることに。

1行目、3行目、5行目・・・奇数行の高さは16、2行目、4行目、6行目・・・偶数行は24。それを400行に渡って繰り返す場合です。

とりあえず、400行選択して奇数行の16にあわせておいて・・・。

VBAを開いて、

Sub gyo()
Dim i As Long

For i = 1 To 400
If i Mod 2 = 0 Then
Rows(i).RowHeight = 24
End If
Next

End Sub

これを実行すると、偶数行の高さを24にしてくれます。ただし、処理時間を少々頂くことがあります(苦笑)。

第×月曜日が休日になるハッピーマンデー。エクセル関数だけで簡単に~という方法は思いつきませんでしたが、第1月曜日が見つかればそれに7日なり14日なりを足せばハッピーマンデーを実現できるかと思いますがどうでしょうか。

例えば、7月の今日は海の日です。7月の第3月曜日と決まっているようです。第1月曜日に14日を足せばイイですよね♪

ええと、万年カレンダーという前提で、西暦はどこかのセルを参照してもらって「yyyy」、ある年の7月1日ですから「セル1=DATE(yyyy,7,1)」こんな感じでしょうか。このある年の7月1日が何曜日かをまず求めます。月曜日なら14日を足せば問題クリアです♪

=IF(WEEKDAY(セル1)=2,セル1+14,"---")

もし、セル1の曜日が月曜日だったら、セル1に14を足しなさい・・・と単純に。2007年の場合、7月1日は日曜日ですからNGですね。

では違っていたら・・・とりあえずIF関数を入れ子にしてみましょう。

=IF(WEEKDAY(セル1)=2,セル1+14,IF(WEEKDAY(セル1+1)=2,セル1+15,"---"))

日本語訳を書くと、「セル1が月曜日ならセル1に14日を足しなさい、セル1が月曜日でなければ1日足した日付が月曜日かどうか調べ、月曜日ならセル1に15日を足しなさい、それ以外なら『---』を表示しなさい」でしょうか。

15を足すのは7月2日ではなく7月1日に足しているから14日+1日で15と言うわけですね。2007年の場合、これで無事クリアです♪

IF関数は7つまで入れ子にできますから、頑張って入れ子にしてください(笑)。とりあえず、以下の関数をテキストエディタなどにコピーして、「セル1」を日付が記載されたセルに置き換えれば利用できるかと。

=IF(WEEKDAY(セル1)=2,セル1+14,IF(WEEKDAY(セル1+1)=2,セル1+15,IF(WEEKDAY(セル1+2)=2,セル1+16,IF(WEEKDAY(セル1+3)=2,セル1+17,IF(WEEKDAY(セル1+4)=2,セル1+18,IF(WEEKDAY(セル1+5)=2,セル1+19,IF(WEEKDAY(セル1+6)=2,セル1+20,FALSE)))))))

余談ですが、西暦を指定してカレンダーを作る場合ですが、1月~12月のカレンダーなら何の問題も起きませんが、会社などで4月から翌3月までの「年度カレンダー」を作成する場合は、1月~3月の西暦に1年プラスすることをお忘れなく。

これを別シートで「祝日一覧表」としてまとめておいて、条件付き書式で判定すれば色分けなど簡単にできるかと思います♪ 当サイトの勤怠表Ver2はこの方法で作成しています。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちstep4カテゴリに属しているものが含まれています。

前のカテゴリはstep3です。

次のカテゴリはstep5です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.04