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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tsuda.a
October 05, 2015
Programming
39
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
95
マジカルインクリメントと指数表記
tsudaahr
0
250
バックアップしていますか?
tsudaahr
0
150
RDB以前のファイル設計の話でもしようか(ぇ
tsudaahr
0
160
NPUわからん
tsudaahr
0
210
計算量オーダーの話
tsudaahr
1
460
クラウド初学者が抱える不安について
tsudaahr
0
330
キューとは何か
tsudaahr
0
280
等幅は死んだ(ぇ
tsudaahr
0
130
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
7
3.6k
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
1
610
JavaDoc 再入門
nagise
0
280
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
さぁV100、メモリをお食べ・・・
nilpe
0
130
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.5k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.2k
AIエージェントの隔離技術の徹底比較
kawayu
0
460
Oxcを導入して開発体験が向上した話
yug1224
4
290
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
440
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
1.5k
3Dシーンの圧縮
fadis
1
650
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.9k
How to make the Groovebox
asonas
2
2.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The agentic SEO stack - context over prompts
schlessera
0
790
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
WCS-LA-2024
lcolladotor
0
620
How to Ace a Technical Interview
jacobian
281
24k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
390
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
380
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) 再びマクロの記録開始から続行! 記録開始 選択 マクロで選択済みのものも 含めて記録される
この方法の欠点 • まあ失敗するときは、こんな準備なんてしていないわけで(汗
ご清聴ありがとうございました。