1/08/2022

Excel。条件付き書式。「文字列」と「指定の値に等しい」は同じ結果にならない【Conditional formatting】

Excel。条件付き書式。「文字列」と「指定の値に等しい」は同じ結果にならない

<条件付き書式>

視覚的にわかりやすくすることができる「条件付き書式」ですが、似て非なるものがチョコチョコあります。


例えば、ホームタブの条件付き書式にある「セルの強調表示ルール」。


その中の「指定の値に等しい」と「文字列」の違いです。


次のようなデータがあって、「優秀」という文字をわかりやすくするために、条件付き書式をつかって、セルを塗りつぶしするようにしてみます。


文字列をクリックして、文字列ダイアログボックスが表示されますので、「優秀」と入力してみると、「優秀」だけではなくて、「最優秀」も、同じように書式が反映されてしまっています。


この「セルの強調表示ルール」の「文字列」は、ダイアログボックスにも書いてあるように、「文字列を含む」というルールになっています。

「最優秀」にも「優秀」という文字が含まれているので、反映されてしまったというわけです。


今回のように、「最優秀」ではなく「優秀」という文字だけ、すなわち、「優秀」と等しい場合には、「文字列」ではなくて、「指定の値に等しい」をつかって、条件付き書式を設定する必要があります。

1/07/2022

Excel。ACOS関数は、逆余弦(アークコサイン)を算出します【ACOS】

Excel。ACOS関数は、逆余弦(アークコサイン)を算出します

<関数辞典:ACOS関数>

ACOS関数

読み方: アーク・コサイン


分類: 数学/三角 

ACOS(数値)

ACOS関数
逆余弦(アークコサイン)を算出します

1/06/2022

Excel。VBA。大量のシート名を指定したシートのコピーを手早く行いたい【Copy of sheet】

Excel。VBA。大量のシート名を指定したシートのコピーを手早く行いたい

<Excel VBA>

単純な作業ほど、繰り返して処理をするとなると、面倒に感じます。

そこで、Excel VBAでマクロをつくって実行させる方が作業効率としても改善できるし、面倒な作業から解放されるわけですね。


そこで、今回は、次のようなケースの対応方法をExcel VBAで対応していきます。


シート店舗一覧には、店舗一覧が用意されています。


 

シート原版は、テンプレシートのシートです。


やりたい処理は、シート原版をコピーします。

コピーしたシートは、A1とシート名をシート店舗一覧から設定します。

作成するシート数は、シート店舗一覧の横浜店から強羅店までです。


作業としては、簡単ですが、店舗数分繰り返すとなると、面倒ですね。


そこで、Excel VBAでプログラミングをつくって対応したいというわけです。


Sub シート作成()

    Dim i As Long

    Dim sheet_name As String

    Dim lastrow As Long


    sheet_name = ""

    lastrow = Worksheets("店舗一覧").Cells(Rows.Count, "a").End(xlUp).Row


    For i = 2 To lastrow

        sheet_name = Worksheets("店舗一覧").Cells(i, "a")

        ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

        ActiveSheet.Name = sheet_name

        Range("a1").Value = sheet_name

    Next

End Sub


実行してみましょう。


店舗一覧の店舗シートを作成することができました。


では、プログラミング文を確認していきましょう。


お馴染み変数宣言ですね。

Dim i As Long 

Dim sheet_name

Dim lastrow As Long


sheet_nameは、店舗名を代入して使用する変数です。


lastrow = Worksheets("店舗一覧").Cells(Rows.Count, "a").End(xlUp).Row

繰り返し処理のために、シート店舗一覧の店舗数を代入しているのが、lastrowです。


For i = 2 To lastrow

    sheet_name = Worksheets("店舗一覧").Cells(i, "a")

    ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

    ActiveSheet.Name = sheet_name

    Range("a1").Value = sheet_name

Next


For i = 2 To lastrow~Next

For To Next文をつかって、繰り返し処理をします。

2から開始しているのは、見出し行を除いたデータがA2にあるからです。


sheet_name = Worksheets("店舗一覧").Cells(i, "a")

シート店舗一覧のA列の店舗名をsheet nameに代入します。


ThisWorkbook.Sheets("原版").Copy after:=Sheets(Sheets.Count)

シート原版をシートの最後尾にコピーします。

「after:」とすることで、そのシートの右側にコピーすることができます。

「Sheets.Count」はシート数を算出します。


例えば、シート数が3枚の場合だと、

「after:=Sheets(Sheets.Count)」は、Sheet(3)の右側にシートをコピーするという意味になります。


ActiveSheet.Name = sheet_name

コピーしたシート名を、代入した名前に置き換えます。


Range("a1").Value = sheet_name

A1に店舗名を設定します。


このように、比較的シンプルなプログラム文で、作業効率を改善することができます。

日頃行っている作業で、面倒なものなどがあれば、Excel VBAをつかって、マクロをつくってみるというのもいいかもしれませんね。

1/05/2022

2021年12月の閲覧ランキングTOP10をご紹介【December 2021 ranking】

2021年12月の閲覧ランキングTOP10をご紹介

<TOP10>

皆様に閲覧していただいた項目の2021年12月TOP10をご紹介

1位

Excel。帳票で、上のセルと同じデータは「〃(おなじ)」で表示したい

https://infoyandssblog.blogspot.com/2021/12/excelsame.html



2位

Excel。連続した列のデータを手早く抽出するには、どうしたらいいの?

https://infoyandssblog.blogspot.com/2021/12/excelconsecutive-columns.html


3位

Excel。条件付き書式。日付が入力されている行だけを塗りつぶすようにしたい

https://infoyandssblog.blogspot.com/2021/12/excelconditional-formatting.html


4位

Excel。整数化するINT関数とTRUNC関数の違いはこうすれば、すぐにわかります。

https://infoyandssblog.blogspot.com/2021/12/excelinttruncintegerization.html


5位

Excel。重複データがあれば、行全体を塗りつぶしして把握したい

https://infoyandssblog.blogspot.com/2021/12/exceloverlapping.html


6位

Excel。大量データ。セル内改行を削除して一行にしたいなら、CLEAN関数で解決

https://infoyandssblog.blogspot.com/2021/12/excelcleanfunction-clean.html


7位

Excel。データ内で一番多い得点は何点なのか?そして何件あるのかを知りたい。

https://infoyandssblog.blogspot.com/2021/12/excel.html


8位

Excel。空白のセル。全角半角スペースの有無はCODE関数で確認できます

https://infoyandssblog.blogspot.com/2021/12/excelcodefunction-code.html


9位

Excel。ピリオドで区切られた日付では計算でつかえない!どうしたらいいの?

https://infoyandssblog.blogspot.com/2021/12/exceldate.html


10位

Excel。一日のタイムスケジュールを管理する24時間横棒グラフを作ってみる

https://infoyandssblog.blogspot.com/2016/03/excel24hour-schedule24.html

1/04/2022

Excel。ACCRINTM関数は、満期利付債の利息を算出します【ACCRINTM】

Excel。ACCRINTM関数は、満期利付債の利息を算出します

<関数辞典:ACCRINTM関数>

ACCRINTM関数

読み方: アクリントエム または、アクルード・インタレスト・マット

ACCRued INTerest (at Maturity)の略


分類: 財務 

ACCRINTM(発行日,受渡日,利率,額面,[基準])

ACCRINTM関数


満期利付債の利息を算出します


1/03/2022

Excel。セル内の文字検索。IF関数ではワイルドカードが使えません。【Character search】

Excel。セル内の文字検索。IF関数ではワイルドカードが使えません

<IF+COUNTIF関数+ワイルドカード>

セル内に横浜市という文字が含まれているかどうかを、検索したい時には、「横浜市*」というように、ワイルドカードをつかうことで、検索することができます。


ただ、次のような表の場合、ちょっと困ったことが発生します。


C列の「○×」は、B列の市区町村のデータで、「横浜市」という文字が含まれていれば、「○」そうでなければ、「×」と算出させています。


C2の数式は、IF関数を使えば簡単に算出できると思ったら、トラブルが発生します。

C2の数式は、

=IF(COUNTIF(B2,"横浜市*"),"○","×")

と設定しています。


なぜ、COUNTIF関数をつかっているのか、理由は、意外かもしれませんが、IF関数の一番目の引数の論理式に「ワイルドカード」が使えないからです。


検索でワイルドカードを使う方法と同じ手法で、IF関数を作ってみるとわかります。

C2に次のように、入力します。

オートフィルで数式をコピーしてみると、算出結果がおかしいことがわかります。

=IF(B2="横浜市*","○","×") 


横浜市が含まれているデータも「×」と算出されています。


比較演算子とセル番地を使う場合のように、「&(アンパサンド)」で結合させないといけないかと考えて、次のようにC2の数式を変更してみたとしても、横浜市が含まれているデータも「×」と算出されてしまいます。

=IF(B2="横浜市"&"*","○","×")


IF関数の論理式には、ワイルドカードをつかった論理式を設定することができないことがわかります。


そこで、COUNTIF関数をつかって、論理式を設定します。

COUNTIF関数は、ワイルドカードを、COUNTIF関数の二番目の引数である「検索条件」で使用することができるからです。


なので、最初に紹介した数式のように、

=IF(COUNTIF(B2,"横浜市*"),"○","×")

とIF+COUNTIF関数のネストで数式をつくることで、セル内に一部のデータが含まれている場合でも、確認することができます。


なお、論理式は、

COUNTIF(B2,"横浜市*") としています。「=」とかありませんが、横浜市という文字が含まれていたら「TRUE」。

含まれていなければ、「FALSE」を返してくれます。


TRUEならば、「真」。

FALSEならば、「偽」。

なので、「○」と「×」をそれぞれ算出してくれるというわけです。


Excelには、今回のケースのように、簡単そうに思えても、イメージ通りにいかず、意外とアイディアが必要となるケースがあるようです。


なお、最近追加されたIFS関数でもCOUNTIF関数をつかわないといけないので、ワイルドカードをつかうことはできないようです。

1/02/2022

Excel。今週のFacebookページの投稿 2021/12/27-2022/1/2【Trivia】

Excel。今週のFacebookページの投稿 2021/12/27-2022/1/2

<Facebookページ>

Facebookページで【書いてみた】Excelの豆知識(Trivia)です。

12月27日

Excel。isodd関数は奇数かの判断関数です。


12月28日

Excel。istext関数は文字列かの判断関数です。


12月29日

Excel。isnumber関数は数値かの判断関数です。


12月30日

Excel。iferror関数はエラー時の処理指定関数です。


12月31日

Excel。iserror関数はエラー時の処理指定関数です。


1月1日

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


1月2日

Excel。ifna関数は#N/A時の処理を指定関数です。

ちなみにver2013から登場です。