「今さら」なんてない

「自分にもできそう」を伝播させるブログ

自分の会社を友人や家族にオススメできますか?【ひらめきラジオ3/4のお題】

「自分が働きたいと思う理想の会社の条件」

という今回のひらめきラジオのお題について、

好条件・悪条件挙げればキリが無いけど
一言に集約するなら

「損得勘定抜きで友人や家族にオススメできる会社」

かな

自分の抱えている嫌な仕事を分担or押し付けるとか
跡継ぎ云々とかの損得勘定ありきの動機ではなく、

純粋に
仲間になってほしい
体験して欲しい
というオススメができる組織

会社に限らず
いろんな組織の目指すところが
この一言に集約できるんじゃないかな

ママ友会をホーソン効果に利用する

妻からママ友会の報告を聞く度、
毎度感心するのが
底なしのネタ生成能力
尽きない旦那の悪口
です。

さらに、
ガールズトークの生々しさには
若者のものでも結構なエグさがありますが、
主婦はもっと凄い

世の旦那様方、
壁に耳あり障子に目ありですよ

常に見られているということを
プレッシャーやストレスと捉えるか
良い緊張感と捉えるか

良い方向に役立てたいですね

エラー箇所をレジストリに保存する【Excel VBA】

複数名で扱うブックでエラーが出るらしいけど
どんなエラーかわからない...

VBAわからない人が見たら
エラーメッセージなんて全部同じに見えるでしょう。

ブック内の非表示シート内に入れようか
模索中といえば模索中ですが
こんな手もあるのか程度に
レジストリに保存する方法を埋め込んでみました。

レジストリの参照方法

'Win R > regeditで開く
'HKEY_CURRENT_USER > Software > VB and VBA Program Setting

このようにコード内にもメモ書きを入れてありますが

Win+R で「ファイル名を指定して実行」を開き
regeditと入力します。

ディレクトリは
HKEY_CURRENT_USER
→ Software
VB and VBA Program Setting
です。

その中の
MyMacro
→Error_Log
に保存するようにしたので
そちらを参照ください。

保存したエラーログ内容

ざっと

  • 発生日時
  • ブック名
  • シート名
  • エラー番号
  • エラー内容

を残すようにしました。
(他にもネタあったらください)

例、確認方法

親プロシージャに

On Error GoTo myError


myError:
  Call SaveErr(Err, Proc名)

を入れておけば,
子プロシージャでエラーが起こっても
エラー保存処理ができるみたいです.

その際、どの子プロシージャでエラーになったかわかるように
変数Procに子プロシージャ名を入れておく小細工をしておきます.

Proc名 = "b": Call b  'Call前にCall対象を取り置きしておく

プロシージャ名以外にも、
長いコードの中の節目を
保存してもいいかもしれません。

コード

Option Explicit
Sub SaveErr(Err, Proc)
  Dim wb As Workbook: Set wb = ActiveWorkbook
  Dim ws As Workbook: Set wb = ActiveSheet
  Dim appname: appname = "MyMacro"
  Dim section: section = "Error_Log"
  Dim key: key = Date & " " & Time
  Dim data: data = wb.Name & " " & ws.Name & " Proc名:" & Proc & " エラー番号" & Err.Number & ":" & Err.Description
  
  SaveSetting appname, section, key, data  'レジストリにエラー情報を保存
    'Win R > regeditで開く
    'HKEY_CURRENT_USER > Software > VB and VBA Program Setting
  
    MsgBox "Proc名:" & Proc & vbCrLf & _
          "エラー番号:" & Err.Number & vbCrLf & _
          "エラーの種類:" & Err.Description, vbExclamation
End Sub

Sub 親Proc()
  Dim Proc名 As String
  On Error GoTo myError
  
  Proc名 = "子Proc1": Call 子Proc1  'Call前にCall対象を取り置きしておく
  Proc名 = "子Proc2": Call 子Proc2
  Exit Sub

myError:  '親プロシージャに一つ入れておけばOK?
  Call SaveErr(Err, Proc名)
End Sub

Sub 子Proc1()
  Dim i As Long
  i = 100 ^ 100000000   'ここでエラーになる→6:オーバーフロー
  Exit Sub
End Sub

Sub 子Proc2()
  Dim i As Long
  i = "a"   'ここでエラーになる→13:型が一致しない
  MsgBox "a"    'エラーになっていればこの行は実行されない
End Sub

以上です。

そもそもバグ洗い出し不足なのは
重々承知しておりますが、

今日起こったらしい問題に対して
思いつきで作った物なので
上手くいくかも分かっておらず
現在進行形で困ってます。

何かもっといい方法あったら教えて頂けると
大変嬉しいです。

ブック内の全角英数を半角に一括変換する【Excel VBA】

社内でいろんな人がいじるブックに
全半角が入り交じっており

  • 検索がかけられない
  • 転記マクロの検索対象に引っかからない

などの不満があったので作りました。
(というかそもそも英数を全角で入れる人なんなの)

機能

まあそのまんまですが
全角英数を1文字ずつ検索しては
半角に変換して回るだけです。

ただしカタカナは半角にはしませんし
@や,などの記号も適用外です。

あくまで英数のみをやっつけます。

説明

最後のセルの探索

いったん1000×100の範囲内に区切ったのですが、
これ以上必要な方は

Function LastCell() As range

の中の

Dim rLast: rLast = 1000 '1000行以内には収まるだろう
Dim cLast: cLast = 100 '100列以内には収まるだろう

をいじってください
(まあこれなら最終セル探索いらないかもだけど練習がてら)

カタカナ除外にひと手間

カタカナを含めてやれば
セルの中身まで入っていかなくてもよくて
簡単なのですが、

カタカナを避けてやろうとすると
1文字ずつ判別しながらやらないといけないので
ひと手間かかるのですが、
英数のみ適用とするように
条件分岐させてやればいいだけです。

Function 英数のみ全→半(strPart)
  Select Case strPart
    Case "0" To "9", "a" To "z", "A" To "Z": 英数のみ全→半 = StrConv(strPart, vbNarrow)
  Case Else
    英数のみ全→半 = strPart
  End Select
End Function

ただ,セル内に混在しているパターンがあるので
1文字ずつ区切って処理していく必要があります.

  For Each rg In Arr
    strAssm = ""
    For s = 1 To Len(rg)
      strPart = Mid(rg, s, 1)
      strPart = 英数のみ全→半(strPart)
      strAssm = strAssm + strPart
    Next s
    Arr(k) = strAssm
    k = k + 1
  Next rg

セル参照の回数は減らした方がいい

繰り返し処理の中で都度セルを参照していじると
繰り返し回数が少ない内は問題ないのですが、
数が増えるとクソ重くて最終的にフリーズします。

なので最初にまとめて配列に格納して、
配列内でいじって
最後にセルに戻した方がいいです。

コード

Option Explicit

Sub Main_ブック内の全角英数を半角に一括変換する()
  Debug.Print Time
  Application.ScreenUpdating = False

  Dim wb As Workbook: Set wb = ActiveWorkbook
  Dim ws As Worksheet
  Dim cnt As Long: cnt = wb.Sheets.Count
  
  Dim st As Long
  For st = 1 To cnt
    Set ws = Sheets(st)
    Call シート内全→半(ws)
  Next st
  
  Debug.Print Time
  Application.ScreenUpdating = True

End Sub

Sub シート内全→半(ws As Worksheet)
  Dim strAssm As String, strPart As String
  
  Dim rLast  As Long: rLast = LastCell.Row
  Dim cLast  As Long: cLast = LastCell.Column
  Dim Arr As Variant: Set Arr = ws.Cells(1, 1).Resize(rLast, cLast)
  Dim rg 
  Dim s As Long
  Dim k As Long: k = 1
  For Each rg In Arr
    strAssm = ""
    For s = 1 To Len(rg)
      strPart = Mid(rg, s, 1)
      strPart = 英数のみ全→半(strPart)
      strAssm = strAssm + strPart
    Next s
    Arr(k) = strAssm
    k = k + 1
  Next rg

  Cells(1, 1) = Arr

End Sub

Function 英数のみ全→半(strPart)
  Select Case strPart
    Case "0" To "9", "a" To "z", "A" To "Z": 英数のみ全→半 = StrConv(strPart, vbNarrow)
  Case Else
    英数のみ全→半 = strPart
  End Select
End Function

Function LastCell() As range
  Dim r As Long
  Dim rLast: rLast = 1000 '1000行以内には収まるだろう
  Do Until WorksheetFunction.CountA(Rows(rLast)) > 0
    rLast = rLast - 1
  Loop
  
  Dim cLast: cLast = 100 '100列以内には収まるだろう
  Do Until WorksheetFunction.CountA(Cells(rLast, cLast)) > 0
    cLast = cLast - 1
  Loop
  
  Set LastCell = Cells(rLast, cLast)
End Function

以上です。
何万行とかのいじめ検証はしていないので
不足があるかもしれませんが、
多くの会社で蔓延ってる問題じゃないかなと思うので
何かのお役立ていただければ幸いです。

これも個人用マクロブックとかで
隠し持っていたら便利かもしれません。

立場をわきまえない会議の進め方

先日、部長3名ほど相手に
ほぼ裸単騎で臨む会議がありました。

見事に惨敗したわけですが、
その時不在だった上司に
ことのあらましを報告すると

「反論はその場でしろ」
「あそこではいろんな人の意見を貰いながら
その場で重ね合わせながらまとめていくんやろ」

という、
リアルタイムコミュニケーションの
会議の進め方を教えられました。

確かに、
ただ決裁や承認をもらうとかなら
メールなどの一方通行のコミュニケーション
で良いわけです。

僕は部長とかそういった
肩書を変に意識して
ヘコヘコしていたような気がします。

そこで自分に必要だったのは
一旦肩書を外して
フラットに意見をぶつけ合い、
束ねていくといる立ち回り方です。

怒れるクレーマーや上司などの怒号に対して
感情をオフにしてテキストだけを抽出して
淡々と話を進めるタイプの
余計な情報のそぎ落とし方とは別の、

ある意味、
立場をわきまえない
意見のぶつけ方を
今後実践していかないといけないと
今更ながら気付かせてもらえた会議でした。

自分の設定根拠の中でも、
「〇〇さんが言ってた」なんて
長い物に巻かれろ的な持って行き方のところが
何点かありました。

全く同じ事を言っても
言う人によって
出した名前によって
伝わったり
伝わらなかったりする経験を
たくさんしてきて、
いつの間にか諦めていたのかもしれません。

「どうせ自分だけで考えたなんて伝わらない」

もちろんお墨付き的な拠り所が
有効な場面もあるとは思いますが
それに甘んじ過ぎていました。

ほかにもいくつか反省点や課題の見えてきた
自分にとってはありがたい会議でした。

新入社員の日記かよみたいなものになりましたが、 こういう今更感満載の記事もいいかもしれません
半年後、1年後、見返してみて
「あの頃はヘッポコだったな」
と笑える日を迎えられるように頑張ります。

ひらめきラジオお題2/25 5分だけ着手で今までできなかったことをやる(報告編)

今回のひらめきラジオのお題の2日後、
宣言編を投稿していましたが、
今回はその結果報告編です。

今回はやったことと結果という形式でさらっといきます

やったこと

  1. 滞納業務のNextActionあぶり出し(5分)
  2. あぶり出したタスクをすぐにやる(5分)

結果

  1. 4つ仕分けた(1/3日)
  2. 3つできた(3/3日)

感想、NextAction

今回溜まっていたのは、
やることを列挙しまくったものの繁忙期に
途中で止まっていたものでした。

リストアップの範囲を
フィルタとかで区切って
視界に入る情報を絞らないとやる気を失う
(というかリストアップしたことによる
モラルライセンシング?)
と改めて反省

あとはリストアップしたら
数日以内にやらないと
鮮度が落ちてやらなくなる
気がする

また月曜、
1つやったらネタ切れするのでまたあぶり出そう

(おまけ:副次効果)

何事も
SISO(単入力単出力)ではなく
MIMO(多入力多出力)
もしくはSIMO(単入力多出力)
だと思うのですが、

こういった実験をすると、
狙った結果以外の派生系副産物が得られるのも
大きな楽しみの一つです。

今回は2つの副次効果が得られたので
そちらも報告させていただきます。

副次作用1:資格勉強の語句系のコツコツタスク化もできた

  1. Googleスライドを作成
    ※3:4くらいの縦長のページ設定にしておく
    (iPhoneで見られるように)
  2. 過去問のスクショをGoogleスライドに貼り付ける
  3. 電車で見る

副次作用2:ブログも工程別にリピートタスクに分解した

この記事も、
各工程に分解したリピートタスクを区切りに進めてみましたが、
やっぱり加速感がいいです

慣れてしまって逆に忘れてきた、
たすくまを使い始めたころの感覚

を思い出すことができました。

面倒がらずに一度細分化すべきですね。。。

5分だけ着手で重い腰を上げる(宣言編)

ひらめきラジオ、今週のお題

「今までやってなかったこと、なかなか着手できなかったことを5分以内でやってみての報告」

お題の要求事項は「報告」ですが、
せっかくなので宣言効果も加えてみます。

着手するネタ:山積した滞納業務の片付け

本題のネタそのものについては、
部屋の片付けにしようとも思いましたが
山積した滞納業務の片付けにしてみます。
(自分からハードルを上げている気がする。。。)

jMatsuzakiさん曰く、
「手順を考えるだけの時間を5分以内で充てても良い」
とのことなので、
NextActionのあぶり出しを5分だけ着手してみることにします。

で、手順を考えたらすぐやってみる 手順を並べて時間を空けるとまた山積状態になって着手できなくなることを何度も経験してきたからです。

補助ツール:ショートカット

さらにせっかくなのでショートカット(旧Workflow)のレシピも作ったので載せてみます。

3分経過後にリマインダーでケツバットしてくれます

5分って意外と長いんですよね

ここの3分は適宜ちょうどいいタイミングにチューニングすればいいと思います。


たすくまをご利用でない方は以下の

  • テキスト
  • URLを開く

を削除して下さい

3分後の中礼が必要で、5分のアラートも欲しい方は
2枚目の画像と同じプログラムを用意して、5分としてください。


たすくまご利用の方は
repeat=●●●●の部分に5分だけ着手するリピートタスクを割り当ててもいいと思います。


ショートカットをホーム画面に置いておけば、
やる気がなくなった時とかいつでも
触れば5分だけダッシュが開始できるはずです。

ショートカットのレシピはこちら

ショートカットのレシピはこちら

ショートカットのアプリはこちら


さて、ひとまず今日から3日間、
期限を決めて挑戦してみようと思います。