Excelのオートフィル機能が使えない?→衝撃の仕様を知った

やあ子供たち、今日はおじさんはね、いつも使っているExcelシートで、オートフィル機能が使えなくなってしまい、あれ?ん~?となってしまったことがあったので内容をここにメモしておくぞ。
まずいつも使っているExcelシートで、何度やっても、オートフィル機能が使えなくなってしまったと「思った」ことがあった。オートフィル機能というのは、1,2、とか隣り合うセルに書いておいてその2つのセルを選択した状態から選択太枠角のポチをマウスでつかんでびーっと範囲拡張すると、1、2、に続くセルで3、4、5、6、、と、果てしもなく連番セルが自動生成できてしまうとても便利な機能のことですね。ま実際、これが使えなくなってしまっていたわけだが、この困り状態を調べるのもなかなか難しく検索ワードが思いつきにくい状況だ。「Excel オートフィル 使えない」などで検索しても、「そもそもオートフィルの設定はONになってますか」とかしか出てこなかったりで、埒があかない。ところが、新規にExcelシートを作成してやってみると、問題なくオートフィル機能は使えるので、PCやExcelがおかしくなったとかではなさそうだ。えー。時間がないので放置しよう。そして後から考えてみた。
「そういえば月に一度しかフィルター機能使わないシートでフィルターかけてる状態だな」

そしてわかったことは、Excelシートがある状態になっていたからというわけだった。その状態とは→「フィルター」でした。

そう、どうやら、フィルター機能で、特定のセルしか見えない状態にしているとき、Excelというソフトは、オートフィル機能が使えない、そんな仕様だったんですねということを、たまたま今日知ったのでここにメモしておくぞ。これはねー、おじさんもねー、長い間Excel使ってきてねー、今日まで知らなかったですよ。だいたいフィルタってあまり使わないんですよ。ソートは使いまくっているわけですが。
まフィルタ中のExcelシートというものは、とかく、新しくすぐ下の行に一行データを追記したかと思うと、フィルター外したときにどこかとんでもない場所(行位置)に追記されてしまっていたりなど、今回のオートフィル機能もそうだけど、フィルター中のExcelシートは、本当に参照・閲覧する場合だけに限って使うようにした方がいいということかな。
やー、これはこれでね。今日気づけたことに感謝だよ。前進ですよねこれもまた。
というわけで、ま今日も一つ勉強になりましたということで。
チャオ!

パワポドキュメントを操作するVBAを書いて楽しく遊ぶその前に

やあ子供たち。おじさんだよ。
ええい、もう何度も何度も思い出すのに時間がかかるのでここに個人的な備忘録として書いてしまおう。
(キーワード(未来の自分の検索用):「PowerPoint」「VBA」「オブジェクトライブラリ」「参照」)

PowerPointを操作するためのVBAを記述するにはオブジェクトライブラリーというものをインポートする必要があります。
しかしながら、いつものことなのだが、おっと、オブジェクトライブラリーをインポートするの忘れてた!ってなるんですね。そう、それはコードをとりあえず書いたりペーストしたりして「実行」ボタンを押して、エラーが出た直後のタイミングに、これを思い出すのです。
VBAって、そーんなにいつも作るわけじゃないので、これをちょうど忘れたころにまたやる必要が出たりするわけで、毎回同じパターンになるわけです。

そして、このオブジェクトライブラリをインポートするには、
VBAウィンドウメニュー>「ツール」>「参照設定」
という項目を開く必要があるのですが、
問題はここなのです。

そう、まさに上述の、「実行ボタンを押してエラーが出た直後だよん」、という状態のとき、「停止」ボタンを押さないと、上記の「参照設定」メニューは、グレーアウトされたままになっている!ということなのです。グレーアウトされてるから、なんでグレーアウトされてんだとか思えれば、つまり見つけられればまだいいですが、いかんせんグレーアウトときたら、白っぽいし、まずグレーアウトに目がいかないわけですよ。「えーと、どこだっけ?ここでもない、ここでもない、ツールのどっかだったと思うんだが―」なんてやってる間って、グレーアウトにえんえん気づけない時とかもあるんですよ。「あれー?あるとしたらツールの中なはずなんだが、、」だから「いつも忘れちゃうな―」「どっかにメモっとくんだったなー」「ググるのもコツがいるしな。。」なんていう堂々巡りを毎回、おじさんはやっていたので、今日でもうそこには終止符を打とうと思います。

はい、

  • オブジェクトライブラリのインポートには「ツール」>「参照設定」を開きます。
  • しかしコードが「実行中」の場合はグレーアウトされているので、コードの「停止」ボタンを押して、グレーアウト状態を解除してから、参照設定をするようにしてください。

これが備忘録だね。これが必要だったんだおじさんには。
でももう迷わないぞ。
今日はこの辺で。チャオ!

Excel任意列の「全角を半角に」「大文字を小文字に」一括変換

Sub ToLowerHankaku(COL)
    'COL 列の1行目から700行目まで、
    ' 全角数字や全角アルファベットを半角になおし
    ' 大文字アルファベットを小文字になおします
    Dim i As Integer
    For i = 1 To 700
        Cells(i, COL).Value = LCase(Cells(i, COL).Value)
        Cells(i, COL).Value = StrConv(Cells(i, COL).Value, vbNarrow)
    Next i
end1:
    
End Sub

Sub main()
  ToLowerHankaku (7)
End Sub

BAT処理に便利なテキストファイル内文字列置換コマンドを作ったよ

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <cstring>
#include <vector>

using namespace std;

void func(
	const string& template_file_path,
	const string& output_file_path,
	const string& str_marker,
	const string& str_ip
)
{
	vector< string > lines;
	{
		FILE* fp = fopen(template_file_path.c_str(), "r");
		if (fp != NULL)
		{
			char ss[2345];
			while (fgets(ss, 2345, fp))
			{
				string iline = ss;
				auto result = iline.find(str_marker);
				if (result != string::npos)
				{
					iline.replace(result, str_marker.size(), str_ip);
				}
				lines.push_back(iline);
			}// while
			fclose(fp);
		}
	}
	{
		FILE* fp = fopen(output_file_path.c_str(), "w");
		if (fp != NULL)
		{
			for (auto& iline : lines)
			{
				fprintf(fp, "%s", iline.c_str());
			}// iline
			fclose(fp);
		}
	}
	return;
}

int main(int argc, char* argv[])
{
	if (argc < 5)
	{
		cout << "usage:   --";
		return 0;
	}
	string template_file_path = argv[1];
	string output_file_path = argv[2];
	string str_marker = argv[3]; // "TO_BE_REPLACED_WITH_IPADDRESS";
	string str_ip = argv[4];// "111.111.111.111";

	func(template_file_path, output_file_path, str_marker, str_ip);
	return 0;
}

CONCAT関数が使えない古いExcelでも複数セル値の全結合文字列を作りたい。

やあ子供たち。ついに春がやって来ましたね。桜も満開に咲いています。皆さんいかがお過ごしですか。
Excelのセルの値や文字列を、全て結合させた一つの巨大な文字列を作りたい、なんてことを思った経験は、ありませんか?そんなとき、2019など新しめのバージョンであれば、CONCAT関数を使っていとも簡単に結合文字列を作成することができるのですが、
例えばOffice2016といった古いバージョンですと、このCONCAT関数が使えないので、困ってしまいます。
例えば以下のように文字列が各行に複数並んでいる場合ですね。
CONCAT関数を使って、このように書けば、以下図)

f:id:nurs:20210408234517p:plain
このように結合文字列が簡単に作れます。それでは、CONCAT関数が使えない場合はどうすればいいのでしょうか。それには以下のような数式を作成し、再帰的にこれを生成しましょう。
f:id:nurs:20210408234521p:plainf:id:nurs:20210408234513p:plain
はい、これはこれまで作成した結合文字列に、順次、新しい文字列を再帰的に追加していく、という結果が得られますので、エクセルの、このセルを選択した際の右下のポチをつかんで下の方までずいーっとひっぱる技ですね、これを、「オートフィル」と呼ぶらしいですが、オートフィルをこのように活用することで、CONCAT関数の使えない2016などの古いエクセルでも、結合文字列が作成できますよ、といった内容でした。

よく、メールアドレスのリストはあるのだけど、それをOutLookの宛先欄に記入するため、セミコロンを区切り文字として結合した巨大文字列を作成したい!なんていうときに使えるかも知れません。と思ったのですが、この活用事例に限っては、(ここから別の話になりますが)OutLookのバージョンによっては、あれです、まず、その各行に並んだ、改行で区切られたメールアドレスの文字列を、まずはOutlookの宛先欄に書いて、下書き保存します。そしてその下書き保存したメールをもういちど開くと、、なんと!改行で区切られていたはずの各メールアドレスが、セミコロンで区切られて、独立したメールアドレスの結合形式に、なっている!!ということがあるようです。やれやれ、知らないということは世の中、本当におそろしいですね。
今日のお話は以上だよ。チャオ!

Excelで手早く、一律な項目名の個別化(インスタンス化)を図る方法

やあ子供たち。おじさんだよ。
今日は一律な項目名を手早くインスタンス化(個別化)する方法を考えたので紹介するよ。それはね、row()関数だ。row()関数は、その行の行番号を返してくれるとてもわかりやすい関数なんだね。なので、アンダースコアの後ろにこのrow()関数の値をくっつけたものを、行ごとにつけていってあげれば、単一の項目名の個別化がいっきに図れるぞ。

f:id:nurs:20210209004404p:plain

今日の内容はそれだけだよ。チャオ!

Excel「折り返して全体を表示する」は「Alt」+「o」「e」「w」、はい「リターン」!

やあ子供たち、Excelで、セルよりも長い文字列を打ち込んだときに、勝手に折り返されて行が追加されてセルの高さも増えてしまうことがあるね。そんなときは、そのセルで、右クリックをして「セルの書式設定」画面を出し、「配置」タブにいって、「折り返して全体を表示」のチェックをかちかちやったりするわけだが、この操作が毎回煩わしいよな。今日はこの「折り返して全体を表示」を、わずか「ポンポンポンポン!」と、キーボードのキーを4拍子たたくだけでトグル、つまり「折り返したり」、「折り返さなかったり」を、切り替えられるウルトラテクを紹介するよ。
(一応言っとくと本記事はExcel2016や2019で確認が取れた筆者の個人的な体験をもとにしているだけの単なる体験談です。内容が不完全だったり、必ずしも本記事の通りにならない状況も多々考えられますのであくまで参考情報とお考え下さい。)
さていきなりショートカットの説明に入るぞ。それは以下のような操作だ。

  1. 「Alt」キーを押しながら、アルファベットの「o」キーを押す
  2. 「Alt」キーを押しながら、アルファベットの「e」キーを押す
    (ここで、画面が、以下左のように、「表示形式」が表示されている状態だったならここで1回だけ「→」(右矢印キー)を押して、以下右図のように、「配置」タブが表示されているようにしよう。これは最初の1回目だけ必要な操作だ。)
    f:id:nurs:20210202003333p:plain:w330f:id:nurs:20210202003437p:plain:w330
  3. 「Alt」キーを押しながら、アルファベットの「w」キーを押すことで、「折り返して全体を表示」のチェックの付ける・外すを切り替えられるようになるので、いずれか望みの状態にしたら、
  4. 「リターンキー」を最後に押して、実行だ!

さて、おさらいしてみよう。上記操作をもとに、以下図の左と右の状態を、上述のキーボード操作だけで切り替えてみよう。
「Alt+oキー」で最初の「ポン」
「Alt+eキー」で二つ目のの「ポン」
「Alt+wキー」でチェックボックスの付ける・外すを切り替えて「ポン」
最後に「リターンキー」で四つ目の「ポン」
つまり、まとめると、対象のセルを選択した状態で、

  • 「ポンポンポンポン!」で、「折り返して全体を表示」のチェックを付け、実行!
  • 次の「ポンポンポンポン!」で、「折り返して全体を表示」のチェックを外し、実行!

が可能となる。より詳細に述べると、
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェックを付け、実行!
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェック外して、実行!
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェックを付け、実行!
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェック外して、実行!
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェックを付け、実行!
Altキーを押しながら―「o」「e」「w」、はい「リターン」!
  →「折り返して全体を表示」のチェック外して、実行!
って、おいおいおいっっ!!!楽しいからっていつまでやってんだ!みたいなことになるってこと。
どうだい?この「折り返して全体を表示」のするしないを切り替えたい時って、複数のセルに対して頻繁に使いたくなったりする場合が多い気がするので、このようにショートカットキーを覚えておくととても効率UPになるんじゃないか?
さて今日はこんなところだ、チャオ!