10/31/2019

Excel。「ふりがな」がない!できれば、「カタカナ」でなく「ひらがな」で表示したい

Excel。「ふりがな」がない!できれば、「カタカナ」でなく「ひらがな」で表示したい

<Excel VBA>

テキストファイルのデータなどをExcelにインポートや貼り付けをします。

簡単に、Excelで使えるようになります。

このデータのふりがなをB列に表示したいので、PHONETIC関数を使って、表示してみます。

ところが、うまくいきません。

原因は、PHONETIC関数は、文字入力情報を表示する関数なので、今回のように、外部からデータをコピーしたりインポートした場合、文字入力情報が欠落しているので、PHONETIC関数では、ふりがなを表示することができません。

では、根性を入れて、ふりがな情報を入力しかないのでしょうか?

そこで、Excel VBAを使ってみると、解決できるかもしれません。

【フリガナを設定する】

入力文字情報がないなら、作るしかありません。
そこで、次の構文を作って実行してみましょう。

Sub ふりがな()
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
End Sub

Range("a1").CurrentRegion.Offset(1, 0) は、A1から隣接するデータを表とします。さらに、Offsetで、見出し行分を除きます。

SetPhonetメソッドは、フリガナを作成するメソッドです。たったこれだけで、入力文字情報を追加することができます。

ただし、注意として、100%正確に設定してくれるわけではありません。

丹羽長秀公は、「ながひで」なのに「ちょうひで」になっています。

ただ、一から全部入力するよりも楽だと思います。

【B列に表示する】

まだ、入力文字情報を設定しただけにすぎませんので、B列に表示する構文を追加していきましょう。

Sub ふりがな()
    Dim i As Integer
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
   
    For i = 2 To 9
        Range("b" & i) = Range("a" & i).Phonetic.Text
    Next
End Sub

Dim i As Integer は、For~To~Nextを使って繰り返し処理をするので、変数を用意します。

Range("b" & i) = Range("a" & i).Phonetic.Text
Phonetic.Text は、フリガナ情報を表示させる、プロパティです。

ふりがなを表示したいB列に、A列の入力文字情報を表示することができます。


【”ひらがな”にする】

この状態でもOKなのですが、見出しは、”ふりがな”と「ひらがな」で書かれていますので、「カタカナ」で表示するのではなく、「ひらがな」に変更していきます。

たった、一行追加する修正です。
Sub ふりがな()
    Dim i As Integer
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
   
    For i = 2 To 9
        Range("b" & i) = Range("a" & i).Phonetic.Text
        Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)
    Next
End Sub

Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)

StrConvは、StrConv関数というExcel VBA専用の関数が用意されています。
これを使用することで文字種を変更することができます。

今回は、カタカナをひらがなに変更したいので、「vbHiragana」という設定値を使うだけです。
また、設定値には、色々用意されています。

実行して確認してみましょう。

このように、「ひらがな」に変更することができました。

入力文字情報がない場合、自力で入力するよりも、Excel VBAで構文を作る方が、たぶん楽でないかと思います。

また、PHONETIC関数を直接作っていないので、フリガナがおかしい場合は、数式を壊すことなく、直接フリガナを修正できるのもメリットだと思います。

なお、今回は、SetPhoneticメソッドを説明する都合、構文を分けましたが、For~To~Nextに含めるのがスマートかと思います。

Sub ふりがな()
    Dim i As Integer
     
    For i = 2 To 9
        Range("a" & i).SetPhonetic
        Range("b" & i) = Range("a" & i).Phonetic.Text
        Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)
    Next
End Sub

10/30/2019

Excel関数辞典 VOL.20。DDB関数~DECIMAL関数

Excel関数辞典 VOL.20。DDB関数~DECIMAL関数

<Excel関数>

今回は、DDB関数~DECIMAL関数までをご紹介しております。

進数変換の関数を多く紹介しています。

DDB関数
ディーディービー
減価償却を定率法で算出
※depreciation, Double-Declining Balance methodの略
DDB(取得価額,残存価額,耐用年数,期[,率])


DEC2BIN関数
デックトゥビン
10進数を2進数に変換する
DEC2BIN(数値[,桁数])


DEC2HEX関数
デックトゥヘックス
10進数を16進数に変換する
DEC2HEX(数値[,桁数])


DEC2OCT関数
デックトゥオクト
10進数を8進数に変換する
DEC2OCT(数値[,桁数])


DECIMAL関数
デシマル
n進数を10進数に変換する
DECIMAL(文字列,基数)

10/28/2019

Excel。Office Insiderの新機能。『スピル』でExcelが激変する!【Spill】

Excel。Office Insiderの新機能。『スピル』でExcelが激変する!

<スピルを使ったVLOOKUP関数>

Office365を使用しているのが条件になるのですが、正式実装される前の様々な機能を先に体験できることができるのが、「Office Insider」です。

登録すると、正式実装前の機能を事前に体験できるのですが、事前ということは、近いうちに実装されるわけですよね。

そのOffice365のExcel。Office Insiderで登場した【スピル】という新機能が、今までのExcelの思考方法を変えてしまう恐れがあります。

とりあえず、新機能のスピルを使ったVLOOKUP関数で紹介していきます。
次の表があります。

B列とD列は、G1:I6の商品リストからVLOOKUP関数を使って検索させます。
E列は、数量と単価を使って算出します。

VLOOKUP関数を勉強する時のお馴染みの表ですね。

通常のVLOOKUP関数を使った数式を、B2につくると、
=VLOOKUP(A2,$G$2:$I$5,2,FALSE)
という数式を設定します。

商品リストのG2:I5は、オートフィルを使って数式をコピーした時に参照がズレないように、絶対参照を設定してあります。

さて、「スピル」を使ったらどのようになるのでしょうか?

B2には、
=VLOOKUP(A2:A4,G2:I5,2,FALSE)
という数式を設定します。

最初の検索値がすでに、変わっていますね。A2:A4と算出したい対象セルを全部選択しています。

さらに、商品リストですが、G2:I5をしています。
先程と比べると何かありませんよね。

そうなんです。

スピルは絶対参照とか不要なんです。
Excelが、「このリストを全部で使うんでしょう?」って察してくれているわけです。

今までだと、オートフィルを使って数式をコピーするとズレるから…絶対参照。

という認識でしたが、不要になりますし、この数式を確定してみると、わかりますが、オートフィルを使って数式をコピー必要もないわけです。

ありゃま。ビックリなスピルです。
同じようにD列の単価も算出しておきます。

E列の金額を算出しますが、ここもスピルで数式がかわります。
E2をクリックして、次の数式を作ります。
=D2#*C2:C4

D2#の「#」は、スピルで算出されている範囲を表します。なお、この「#」のことを、【スピル範囲演算子】というそうです。

そして、C2*C4と算出させたい、範囲を選択して確定させます。

このように、算出することができました。
なお、B3をクリックして、数式バーをみると、数式の文字の色が薄いグレーになっていることがわかります。

オートフィルを使って数式をコピーしたわけではなかったですよね。

これはスピルによって勝手に算出してくれています。
このように、スピルによって勝手に算出されたセルを【ゴースト】って呼ぶそうです。

なので、もし修正したい場合は、B2の数式を直す必要があります。

このB3の数式を削除しようとしても削除できません。また違う値を入力しようとすると、

#SPILL!というエラーが表示されてしまいます。

【データが追加された時が楽】

例えば、データが増えた場合、数式を変更した後、オートフィルを使って数式をコピーしなおしますが、ゴーストの範囲を増やすだけでいいので、B2の数式を次のように修正するだけで、対応することができます。

=VLOOKUP(A2:A4,G2:I5,2,FALSE)

=VLOOKUP(A2:A5,G2:I5,2,FALSE)
と範囲を修正するだけです。

【テーブルでは使えない?】

この表をテーブルに変換するとどうなるのかというと、スピルはテーブルには、対応してないようです。

今後正式実装されるだろう【スピル】。早めに知っていて損はなさそうですね。
このスピル(Spill)は、溢れるという意味なんだそうです。

10/27/2019

今週のFacebookページの投稿 2019/10/21-2019/10/27

今週のFacebookページの投稿 2019/10/21-2019/10/27

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

10月21日
Excel。days関数は日数計算関数です。ちなみにver2013から登場です。

10月22日
Excel。date関数は数値から日付を算出関数です。

10月23日
Excel。year関数は年を抽出する関数です。

10月24日
Excel。month関数は月を抽出する関数です。

10月25日
Excel。day関数は日を抽出する関数です。

10月26日
Excel。time関数は数値から時刻を算出関数です。

10月27日
Excel。hour関数は時間を抽出する関数です。

Excelテクニック and  MS-Office recommended by PC training
https://www.facebook.com/exceltechniqueandmsoffice/

10/25/2019

Excel。年代別で傾向や特徴をわかりやすくする表にまとめてみよう。度数分布表【Frequency distribution table】

Excel。年代別で傾向や特徴をわかりやすくする表にまとめてみよう。度数分布表

<COUNTIFS関数・FREQUENCY関数>

アンケート結果をただ、表にしただけでは、単なる文字データであって、もったいないので、カテゴリー別ごとに集計するとわかりやすくなります。

そこで、今回は、次のような文字データをまとめる作業をしていきます。

50件のデータです。性別・年齢・購入数だけのデータの集まりだけです。

そこで今回は、年代別で何名いるのかを把握していきます。
集計表を用意します。

F列は、年代の区切りの始めの数値を入力しておきます。

G列は、年代の区切りの終わりの数値を入力してありますが、書式形式を使って、数値の前に「~」を表示させています。

"~"G/標準 という表示形式のユーザー定義を設定しています。

H列は、最初はCOUNTIFS関数を使ってケースを紹介します。
I列は、FREQUENCY関数を使ったらどうなるのか、確認するための列です。

H2に10代の人数をCOUNTIFS関数で算出していきますが、引数で何度も、C2:C51を範囲選択する必要があり、煩雑になりますし、面倒なので、C2:C51に名前の定義で名前を設定すると便利です。

今回は、『年齢値』という名前を設定しておきます。

それを踏まえたうえで、数式を作っていきます。

H2をクリックして、COUNTIFS関数ダイアログボックスを表示します。

検索条件範囲1には、「年齢値」
検索条件1には、”>=”&F2
条件で比較演算子とセル番地を組み合わせて使うときには、比較演算子をダブルコーテーションで囲む必要があります。

そして、セル番地を「&」を使って結合します。

検索条件範囲2には、「年齢値」
検索条件2には、”<=”&G2
OKボタンをクリックして、オートフィルを使って数式をコピーしましょう。

H2の数式は、
=COUNTIFS(年齢値,">="&F2,年齢値,"<="&G2)
こんな簡単な数式を使うだけでも、10代が少ないとか、色々見えてきますね。

【COUNTIFS関数よりもFREQUENCY関数が便利】

算出するのに、COUNTIFS関数で十分なのですが、今回のような「度数」を算出するのに、便利な関数があります。

それが、FREQUENCY関数です。

ただ、配列関数で作る必要がありますので、ダイアログボックスで作成すると、面倒なので、今回は、直接数式を入力して作る方が楽かと思います。

最初に、算出したい箇所を範囲選択します。

=FREQUENCY(年齢値,G2:G8)
と入力したら、通常Enterキーで数式を確定しますが、配列関数で算出させるので、Ctrl+Shift+Enterで数式を確定します。

=FREQUENCY(年齢値,G2:G8) という数式の前後に、配列関数を意味する、「{ }」が付きました。

算出結果をみれば、COUNTIFS関数と同じ結果になっているのが確認できます。

FREQUENCY関数は、度数分布を算出する関数です。

FREQUENCY(データ配列,区分配列) という2つの引数を設定するだけなので、覚えておくと便利な関数ですね。

ただ、配列関数で算出する点を忘れないようにしましょう。

10/24/2019

Excel。グラフの復習。バブルチャート~折れ線グラフ。横軸が日付【Graph】

Excel。グラフの復習。バブルチャート~折れ線グラフ。横軸が日付

<グラフ>

Excelのグラフは、用途に合わせて様々なグラフを作ることができます。
今回は、グラフの復習ということ、4つをピックアップ

・Excel。バブルチャートが作れないという声にこたえて。
・Excel。バブルチャートグラフをアレンジしてみよう
・Excel。折れ線グラフでランキング推移グラフ作る時のポイント
・Excel。折れ線グラフ。横軸が日付だと期間全部を表示しちゃう。

Excel。バブルチャートが作れないという声にこたえて。
Excel。バブルチャートグラフをアレンジしてみよう

バブルチャートグラフをアレンジして、わかりやすいようにしていきましょう。
バブルチャート

<続きはこちら>
Excel。バブルチャートが作れないという声にこたえて。
https://infoyandssblog.blogspot.com/2014/09/excel_20.html

Excel。バブルチャートグラフをアレンジしてみよう
https://infoyandssblog.blogspot.com/2014/09/excel_24.html


Excel。折れ線グラフでランキング推移グラフ作る時のポイント

第1週が1位で第2週が5位で第3週が3位で第4週は12位…というグラフのことですが、
このようなグラフを作りたい
ランキング推移グラフ

<続きはこちら>
Excel。折れ線グラフでランキング推移グラフ作る時のポイント
https://infoyandssblog.blogspot.com/2014/12/excel.html

Excel。折れ線グラフ。横軸が日付だと期間全部を表示しちゃう。

横軸が日付の場合、その日付以外の期間全部が表示されてしまって困る
折れ線グラフ

<続きはこちら>
Excel。折れ線グラフ。横軸が日付だと期間全部を表示しちゃう。
https://infoyandssblog.blogspot.com/2015/02/excelline-graph.html

10/22/2019

Excel。順位推移グラフを作成したいけど、どうしたらいいの?【Rank transition graph】

Excel。順位推移グラフを作成したいけど、どうしたらいいの?

<順位推移グラフ>

プロスポーツなど順位がどのように推移してきたのかがわかるようなグラフを作りたい場合は、『順位推移グラフ』を作るといいのですが、なかなか面倒ですので、確認をしておきましょう。
作りたい『順位推移グラフ』は次のようなグラフです。
順位推移グラフ

作りたいグラフの為の表を作る必要がありますので、今回用意した表は次の表です。

なお、チーム名や順位は架空ですので、あしからず。

F列のデータは、最新のデータである、E列のデータをそのまま参照しています。
例えば、F2の数式は、=E2と設定しています。

このF列がポイントで、マーカー付き折れ線グラフの右側にチーム名を表示させる為のデータです。

また、A1の見出しとF1の見出しは、何も入力していません。

A1:F7を範囲選択して、マーカー付き折れ線グラフを挿入します。

挿入したグラフは、大きくして、グラフタイトルを削除しておきます。

横軸が月の推移になっていませんので、「行/列の切り替え」をクリックして、切り替えを行います。

グラフが次のようになりました。

横軸の両脇にスペースがありますので、縦軸に接するようにしますので、横(項目)軸をクリックして、選択対象の書式設定をクリックして、軸の書式設定作業ウィンドウを表示します。

軸の書式設定は、軸のオプションの「軸位置」を「目盛」に変更します。

最新のデータが成績のいい順番に並び替えると、わかりやすくなりますので、今度は、縦(値)軸をクリックします。

軸のオプションの「横軸との交点」を「軸の最大値」に変更します。そして、「軸を反転する」をONにします。

グラフはこのようになりました。


【マーカーに順位を表示する】

一位の折れ線グラフをクリックします。

データ系列の書式設定の「マーカー」の「マーカーオプション」から種類とサイズを変更します。また、塗りつぶしを淡色系にしてもいいですね。

一番右端のマーカーだけを選択します。

データ要素の書式設定から「マーカーオプション」から「なし」を選択します。

次に線も消します。

データ要素の書式設定のままなのを確認して、「線」に切り替えて「線」から「線なし」を選択します。

これを、繰り返すと、グラフは次のようになりました。

左側の縦(値)軸を非表示しますので、縦(値)軸をクリックします。

軸の書式の「軸のオプション」にある「ラベル」のラベル位置を「なし」にします。

【データラベルを表示】

グラフのデザインタブの「グラフ要素を追加」にある「データラベル」から「中央」を選択します。

グラフにデータラベルが表示されました。

一番右側のデータラベルだけを選択します。

データラベルの書式設定のラベルオプションから「ラベルの内容」を「系列名」にして、「ラベル位置」を「左」に設定します。

これをデータ全てに繰り返します。

あとは、フォントサイズなどを調整して完成です。

手間はかかりますが、順位推移グラフも作ることができますよ。

10/21/2019

今週のFacebookページの投稿 2019/10/14-2019/10/20

今週のFacebookページの投稿 2019/10/14-2019/10/20

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

10月14日
Excel。iserror関数はエラー時の処理指定関数です。ちなみに~ver 2003まで。

10月15日
Excel。iserr関数は#N/A以外のエラー判定関数です。

10月16日
Excel。ifna関数は#N/A時の処理を指定関数です。ちなみにver2013から登場です。

10月17日
Excel。isna関数は#N/Aのエラー判定関数です。

10月18日
Excel。error.type関数は数式の結果のエラー判定関数です。

10月19日
Excel。now関数は日付と時刻関数です。

10月20日
Excel。today関数は日付と時刻関数です。

Excelテクニック and  MS-Office recommended by PC training
https://www.facebook.com/exceltechniqueandmsoffice/

10/19/2019

Excel。INDIRECT関数でシート名を見出しにした別シートの表に集計。だけど、日付だとエラーになるのでどうしたらいいの?【Aggregate】

Excel。INDIRECT関数でシート名を見出しにした別シートの表に集計。だけど、日付だとエラーになるのでどうしたらいいの?

<SUM+INDIRECT関数&TEXT関数>

各月ごとに店舗集計されたシートがあります。

それぞれ、シート名は、1月・2月・3月としてあります。

そして、集計するシートが、売上集計シートです。

この売上集計シートのB2には、1月の合算値を算出して表示したいわけです。

シートごとに合計値を算出して、セル参照でもいいのですが、どのみちセル参照の作業が必要ならば、セル参照も合計値を求めることも、まとめて出来れば作業効率がいいわけですね。
しかも、その式をオートフィルでコピーできれば、さらに便利ですね。

通常ならば、売上集計のB2の数式は次のように作るはずです。

=SUM('1月'!B2:B6)

シート名の「1月」が入っているのはいいのですが、この数式をオートフィルを使って数式をコピーしても、シート名は勝手に、2月・3月と変わりませんから、当然おかしな数値が計上されてしまいます。

このぐらいのデータなら、根性をいれればどうにかできないこともありませんが、たいへんです。

そこで、オートフィルを使って数式をコピーするには、どうしたらいいのか、考えると、自動的に、引数内の1月が2月と変わってくれればいいわけですね。

そこで、登場するのが、「INDIRECT関数」です。

この関数は、文字を直接使用することができるという、知っていると、とても便利な関数です。

準備としては、A2:A4にシート名と同じ文字を入力しておきます。

では、INDIRECT関数を使った数式を作って確認してみましょう。

B2の数式は、
=SUM(INDIRECT(A2&"!b2:b6"))

合計値を算出したいので、SUM関数を使います。
引数内のINDIRECT(A2&"!b2:b6")は、A2は1月という文字だとイメージします。

「1月」という文字に「!b2:b6」を結合しますので、「&」を使って結合させます。

あとは、オートフィルを使って数式をコピーすれば、完成です。

このINDIRECT関数は便利なのですが、シート名が次のようになると、工夫が必要になります。
シート名の「1月」を「2020年1月」と変更します。

A2も「2020年1月」と変更してみると、「#REF!」というエラーになります。

シート名もセルも2020年1月なのに、エラーになってしまったのでしょうか?
その原因は、INDIRECT関数は『文字』を参照します。シート名は2020年1月という文字なのですが、A2は、2020/1/1と日付でExcelは認識しています。

つまり、A2は文字ではなくて日付になってしまったので、エラーになったわけです。

【TEXT関数を使って日付を文字に】

日付を文字列に変更するといいわけですね。このような場合に登場する関数が「TEXT関数」です。
TEXT関数は、表示形式を設定できる関数です。

では、数式を次のように修正することで算出することができます。

=SUM(INDIRECT(TEXT(A2,"yyyy年m月")&"!b2:b6"))
このように数式を修正することで、シート名が日付でも対応することができます。

INDIRECT関数は便利なのですが、ちょっと注意が必要なケースもあります。