Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Excelのどうでもよいtipsの紹介
Search
tsuda.a
October 05, 2015
Programming
42
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Excelのどうでもよいtipsの紹介
Excelのどうでもよいtipsの紹介
tsuda.a
October 05, 2015
More Decks by tsuda.a
See All by tsuda.a
Git を GUI で使う話
tsudaahr
0
110
マジカルインクリメントと指数表記
tsudaahr
0
270
バックアップしていますか?
tsudaahr
0
150
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
170
NPUわからん
tsudaahr
0
220
計算量オーダーの話
tsudaahr
1
470
クラウド初学者が抱える不安について
tsudaahr
0
470
キューとは何か
tsudaahr
0
290
等幅は死んだ(ぇ
tsudaahr
0
140
Other Decks in Programming
See All in Programming
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
100
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
Android CLI
fornewid
0
210
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.5k
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.6k
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
350
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
610
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
110
Built Our Own Background Agent at LayerX
layerx
PRO
9
5.1k
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
210
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
900
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.3k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Optimizing for Happiness
mojombo
378
71k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
680
New Earth Scene 8
popppiees
3
2.5k
Transcript
Excelのどうでもよい Tipsの紹介 @tsuda_ahr LTDD #19
Excel 2016 でました。パッケージ版は廃止との由。 http://pc.watch.impress.co.jp/docs/news/20150929_723249.html
お値段は 14,800 円
Office ではなく Excel 単体? いや、実際、Excel しか 使ってないよね? (ぇ
話は違いますが Visio は健在です。みんな買いましょう。
さて本題
いくつか、どうでもいい Tip を紹介します。 1. ワークシート名をセルに表示したい 2. 条件付き書式を固定化したい 3. 結合したセルの高さを自動調整したい 4.
CTRL+選択で選択ミスしたときの対応方法
1.ワークシート名をセルに表示したい
こんなことってありませんか? 連動させたい こんな感じで呼びたい
マクロで組めば瞬殺? • 作ろうとすると、実は結構難しい
ポイントは2点 • 呼ばれ元のシート名が分からない • Application.Caller.Worksheet.Name (*1) で求める (ActiveSheet.Name だと、うまくいきません) •
シート名を変更しても、セル側の表示が連動しない • Application.Volatile (*1) を指定する (*1) 個別の意味の詳細はぐぐって下さい
完成したコード Function ThisWorksheetName() As String Application.Volatile ThisWorksheetName = Application.Caller.Worksheet.Name End
Function
2.条件付き書式を固定化したい
こんなことってありませんか? これを固定化したい
形式を選択して貼り付け、ではうまくいかない。 書式だけのコピーはできるけど、条 件付き書式の固定化はできない つまり 「数式」に対する「値」 のようなオプションはない
マクロで… • 無理(汗 難易度が高すぎる。 • 条件付き書式の適用結果示すプロパティが存在しない。 • たとえば、Range(“~”).Interior.Color をみても、条件付き書式の適用前の色しか取得できない。 •
無理にマクロで頑張る場合、条件付き書式を解析する必要がある。 Range(“~”).FormatConditions(n) を一つ一つみて、条件が適合しているかを判断する必要がある。
そこで Word ! ① Excel でコピー ② Word に貼り付け ③
Word でコピーしなおし ④ Excel に貼り直し
すると文字を消してもこの通り!
教訓 • Excel だけに頼るな!
ただ、データバーとかアイコンセットとかはダメです(汗 こういうのはダメ
Word を買ってない人はどうすればいいのか? • 同じことは VBA とPowershell (*1) を使って、できないこともない (汗 Sub
PasteDisplayInterior() Set wsh = CreateObject("WScript.Shell") cmd = "Powershell -sta -command " _ & """" _ & " Add-Type -an System.Windows.Forms; " _ & " $a = [System.Windows.Forms.Clipboard]::GetData('HTML Format'); " _ & " [System.Windows.Forms.Clipboard]::Clear(); " _ & " [System.Windows.Forms.Clipboard]::SetData('HTML Format', $a); " _ & """" wsh.Run cmd, 0, True ActiveSheet.Paste End Sub 要するに HTML (*1) Powershell の使用は個人的な好み。
3.結合したセルの高さを自動調整したい
単一のセルの場合 ここをダブルクリックすると 高さを自動調整してくれる
結合したセルの場合 ここをダブルクリックすると 結合したセル 逆に高さを低くされた!
なんで? • 複合セルのデータは自動調整の対象から外されるから。 • 対象の行/列の、単一のセルの調整結果が設定される。 • 対象の行/列に結合セルと空セルしかない場合は、デフォルトの幅、または高さが設定される。 • なぜ外されるかと言えば、自動調整できないから。 •
たとえば、以下のようなセル結合の場合、自動調整でどこのセルの高さや幅を調整すればよいか判 断できますか?
でもでも • 確かにセル結合していますけど、今回自動調整したいのは高さ側で、行方向にはセル 結合していないじゃないですか • だったら自動調整してくれても良いのでは? • でもやってくれない (´・ω・`) •
「折り返して全体を表示する」にしなければ、フォントの高さには合わせてくれるようではある… 行方向は1セル 列方向は複数セルだけど
なんとかならないか? • VBAで書いたらなんとかなった! 対象のセルを選択して CTRL + SHIFT + A を押す!
ショートカットキーを 割り当てる
その VBA のコード (1) Sub AutoFitHeight() ' 対象のセルを決定 Dim targetCell
As Range Set targetCell = ActiveCell ' 「折り返して全体を表示」を設定 targetCell.WrapText = True
VBA のコード (2) ' 枠の幅 Dim borderWidth As Variant borderWidth
= 0.63 ' 連結したセルの幅を計算 Dim totalWidth As Variant Dim x As Range totalWidth = -borderWidth For Each x In targetCell.MergeArea.Columns totalWidth = totalWidth + x.ColumnWidth + borderWidth Next この値は当て推量かつ固定(汗
VBA のコード (3) ' 作業用のWorkBookを作成 Dim work As Worksheet Set
work = ThisWorkbook.Sheets.Add ' 作業用のシートに、対象のセルをコピー targetCell.Copy work.Paste ' 貼り付けたセルのセル結合を解く Selection.UnMerge
VBA のコード (4) ' 計測した対象セルの幅を、貼り付け先のセルの幅に設定し、自動調整を実行 ActiveCell.ColumnWidth = totalWidth ActiveCell.EntireRow.AutoFit '
自動調整で得たセルの高さを、対象のセルに設定 targetCell.RowHeight = ActiveCell.Height ' 作業シートの削除 Application.DisplayAlerts = False work.Delete Application.DisplayAlerts = True End Sub
なにをやっているのか? • 結合セルでは自動調整できないので、単一セルに内容をコピーして自動調整させる。 • そのために、作業用のワークシートを作成し、そこに対象のセルをコピーする。 (元シートで操作せず他のシートにコピーするのは、元シートへの影響を極力排除したいためです) • おおよそ以下の手順で作業。 1. 対象の結合セルの幅を計測する。
2. 作業用のワークシートを追加。 3. 対象の結合セルを、作業用のワークシートにコピーする。 4. コピー先のセルの結合を解除し、単一セルにする。 5. 上記 1. で計測したセル幅を、コピー先のセルに適用し、高さの自動調整をする。 6. 自動調整で得た高さを、対象のセルの高さとして設定する。 7. 最後に作業用のワークシートを削除する。
結論 • めんどうくさい。 • すなおに手動で調整しよう(汗
4.CTRL+選択で選択ミスしたときの対応方法
黄色の箇所だけ選択したい
失敗した (´・ω・`) あと一つのところで、 違うセルを選択(汗
複数選択時の「一つだけ解除」はいまだに実装されてない • 早く実装して(汗 #きっと無理
次善策? • マクロ記録を使う
(1) 記録開始 ALT+F11で VBEを起動 記録開始
(2) 選択していくと記録されていく。
(3) 失敗したら、マクロを停止して編集しましょう 消す 停止して 消す
(4) 編集したマクロを実行! すると選択されてない状態に戻る マクロを実行
(5) 再びマクロの記録開始から続行! 記録開始 選択 マクロで選択済みのものも 含めて記録される
この方法の欠点 • まあ失敗するときは、こんな準備なんてしていないわけで(汗
ご清聴ありがとうございました。